深圳网站建设方维,电商网页设计网站,wordpress 如何编辑器,网站加载效果怎么做的观察者模式是软件开发中常用的一种设计模式#xff0c;它通过定义一对多的依赖关系#xff0c;使得一个对象#xff08;主题#xff09;的状态变化可以通知多个其他对象#xff08;观察者#xff09;。
这种模式的优点是解耦和增加扩展性#xff0c;用于实现对象之间的…观察者模式是软件开发中常用的一种设计模式它通过定义一对多的依赖关系使得一个对象主题的状态变化可以通知多个其他对象观察者。
这种模式的优点是解耦和增加扩展性用于实现对象之间的松耦合通信。
如果要自己编码实现我们通常定义一个主题接口Subject和一个观察者接口Observer。主题接口中包含注册观察者、移除观察者和通知观察者的方法而观察者接口中则定义了更新状态的方法。具体的主题类和观察者类实现这些接口并进行相应的业务逻辑实现。
考虑到实现简单点我们假定有一个广播类这个广播类实际上就是一个主题Subject有多个听众收听这个广播这里每个听众就是一个观察者Observer
定义一个主题Subject的接口类
/*** 主题被观察者*/
public interface Subject {/*** 添加观察者*/void addObserver(Observer observer);/*** 移除观察者*/void removeObserver(Observer observer);/*** 通知观察者*/void notifyObserver(String message);
}
定义一个观察者Observer的接口类
/*** 观察者*/
public interface Observer {void recieve(String message);}
接下来就是定义一个广播的类用来实现主题接口
/*** 广播负责向听众广播消息*/
public class Broadcast implements Subject{private final ListObserver observerList new ArrayList();Overridepublic void addObserver(Observer observer) {observerList.add(observer);}Overridepublic void removeObserver(Observer observer) {observerList.remove(observer);}Overridepublic void notifyObserver(String message) {for (Observer observer : observerList) {observer.recieve(message);}}
}
再定义一个听众类用来实现观察者接口
public class Audience implements Observer {private final String name;public Audience(String name) {this.name name;}Overridepublic void recieve(String message) {System.out.println(name received message: message);}
} 写一个测试类来测试结果
public class Test {public static void main(String[] args) {Broadcast broadcast new Broadcast();Audience audience1 new Audience(哈尔滨听众);Audience audience2 new Audience(大庆听众);broadcast.addObserver(audience1);broadcast.addObserver(audience2);broadcast.notifyObserver(中央电视台黑龙江电视台);broadcast.notifyObserver(黑龙江电视台中央电视台);broadcast.removeObserver(audience2);broadcast.notifyObserver(大庆听众关了广播);}}
结果打印如下 解释一下广播了两拨消息2名听众都收到了这两拨消息。后面移除了一个听众广播了第三波消息这时只有剩下的那个听众收到了广播消息