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

Posted vvii

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式---观察者模式相关的知识,希望对你有一定的参考价值。

  • 观察者模式定义
    观察者模式定义了一对多的的依赖关系,让一个或多个观察者对象监测一个主题对象,这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些对象能够自动更新。
  • 观察者模式实现
    -- 被观察查的接口对象
    -- 具体被观察者对象
    维护所有观察者对象列表,状态发生变化时会发送通知给所有的观察者对象
    -- 观察者对象
    -- 具体观察者对象
// 被观察者对象的接口
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("加油");
  • 输出结果
    技术图片

以上是关于设计模式---观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

设计模式观察者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

观察者模式

未调用 LiveData 观察者

设计模式之美(c++)-笔记-56-观察者模式

设计模式之美(c++)-笔记-56-观察者模式