设计模式---观察者模式

  • 观察者模式定义
    观察者模式定义了一对多的的依赖关系,让一个或多个观察者对象监测一个主题对象,这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些对象能够自动更新。
  • 观察者模式实现
    -- 被观察查的接口对象
    -- 具体被观察者对象
    维护所有观察者对象列表,状态发生变化时会发送通知给所有的观察者对象
    -- 观察者对象
    -- 具体观察者对象

// 被观察者对象的接口
public interface MsgSubject {
    void registerObserver(Observer o);
    void removeObserver(Observer o);
    void notifyObserver();
}
public class Msg implements MsgSubject {
    private List<Observer> observers = new ArrayList<>(); //观察者列表
    private String msg;

    @Override
    public void registerObserver(Observer o) {
        observers.add(o);
    }

    @Override
    public void removeObserver(Observer o) {
        observers.remove(o);
    }

    @Override
    public void notifyObserver() {
        for (int i = 0; i < observers.size(); i++) {
            Observer observer = observers.get(i);
            observer.updateMsg(msg);
        }
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
        notifyObserver();
    }
}
public interface Observer {
    void updateMsg(String msg);
}
public class User implements Observer {

    private String name;
    //构造器
    public User(String name) {
        this.name = name;
    }
    @Override
    public void updateMsg(String msg) {
        System.out.println("["+name+"]: 收到消息【"+msg+"】");
    }
}
//测试:
        User user = new User("Mi");
        User user1 = new User("Ya");
        User user2 = new User("Xi");

        Msg msg = new Msg();
        msg.registerObserver(user);
        msg.registerObserver(user1);
        msg.registerObserver(user2);
        msg.setMsg("预祝明天考试通过");
        msg.removeObserver(user);
        msg.setMsg("加油");
  • 输出结果
posted @ 2019-11-18 19:38  VVII  阅读(114)  评论(0)    收藏  举报