大话设计模式之观察者模式

☆樱花仙子☆ 提交于 2020-04-04 09:46:56

1:类图的实现

 

 

 

2:观察者模式的分析

  针对,上面的类图我们详细讲解一下观察者模式的概念:观察者模式是一种一对多的依赖关系,让多个观察者对象能够监听同一个对象,只要该对象发生变化后,所有观察者都可以知道,使观察者能够更新自己的状态。

  Subject类:该类型为通知者,把所有观察者都装进自己的内部的容器里,这个容器可以有一定数量的观察者,允许一定的删除和添加,该通知者发生变化时,Subject类型中有notifly方法来同时观察者。

  Observer类:该类为观察者,即每一个需要被通知者通知的对象都要实现该方法,同时实现接口里的Update方法,供Subject通知类使用来通知观察者。

3:代码实现

package observerPattern;

/**
 * @author :dazhu
 * @date :Created in 2020/4/4 7:49
 * @description:
 * @modified By:
 * @version: $
 */
public class Main {
    public static void main(String[]args){
        Observer o1 = new Observer1("张三");
        Observer o2 = new Observer2("李四");
        Observer o3 = new Observer2("王二");

        Subject s1 = new Subject1("小梅");
        Subject s2 = new Subject2("小红");

        s1.addObserver(o1);
        s1.addObserver(o2);

        s2.addObserver(o3);
        s2.addObserver(o2);

        s1.notiflyObserver();
        o1.showMe();
        o2.showMe();
        o3.showMe();

        s2.notiflyObserver();
        o1.showMe();
        o2.showMe();
        o3.showMe();
    }
}

package observerPattern;

public interface Observer {
    public void update(int number);
    public void showMe();

}
package observerPattern;

import java.util.ArrayList;
import java.util.List;

public interface Subject {
    //提供添加观察者
    public void addObserver(Observer observer);
    //删除观察者
    public void delObserver(Observer observer);
    //通知观察者
    public void notiflyObserver();

}
package observerPattern;

import java.util.ArrayList;
import java.util.List;

/**
 * @author :dazhu
 * @date :Created in 2020/4/4 7:51
 * @description:1号通信员
 * @modified By:
 * @version: $
 */
public class Subject1 implements Subject{
    private String name = null;
    private List<Observer> list = new ArrayList<>();
    public Subject1(String name){
        this.name = name;
    }
    @Override
    public void addObserver(Observer observer) {
        list.add(observer);
    }

    @Override
    public void delObserver(Observer observer) {
        list.remove(observer);
    }

    @Override
    public void  notiflyObserver() {
        for(Observer o:list){
            o.update(100);
        }
    }
}
package observerPattern;

import java.util.ArrayList;
import java.util.List;

/**
 * @author :dazhu
 * @date :Created in 2020/4/4 7:53
 * @description:2号通信员
 * @modified By:
 * @version: $
 */
public class Subject2 implements Subject {
    private String name = null;
    private List<Observer> list = new ArrayList<>();
    public Subject2(String name){
        this.name = name;
    }
    @Override
    public void addObserver(Observer observer) {
        list.add(observer);
    }

    @Override
    public void delObserver(Observer observer) {
        list.remove(observer);
    }
    @Override
    public void  notiflyObserver() {
        for(Observer o:list){
            o.update(200);
        }
    }
}
package observerPattern;

/**
 * @author :dazhu
 * @date :Created in 2020/4/4 7:50
 * @description:1号观察者
 * @modified By:
 * @version: $
 */
public class Observer1 implements Observer{
    private String name = null;
    public int number = 0;

    public Observer1(String name){
        this.name = name;
    }

    @Override
    public void update(int number) {
        this.number = number;
    }
    @Override
    public void showMe() {
        System.out.println(number);
    }
}
package observerPattern;

/**
 * @author :dazhu
 * @date :Created in 2020/4/4 7:51
 * @description:2号观察者
 * @modified By:
 * @version: $
 */
public class Observer2 implements Observer{
    private String name = null;
    public int number = 0;

    public Observer2(String name){
        this.name = name;
    }

    @Override
    public void update(int number) {
        this.number = number;
    }
    @Override
    public void showMe() {
        System.out.println(number);
    }

}
package observerPattern;

/**
 * @author :dazhu
 * @date :Created in 2020/4/4 7:51
 * @description:3号观察者
 * @modified By:
 * @version: $
 */
public class Observer3 implements Observer {
    private String name = null;
    public int number = 0;

    public Observer3(String name){
        this.name = name;
    }

    @Override
    public void update(int number) {
        this.number = number;
    }
    @Override
    public void showMe() {
        System.out.println(number);
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!