上饶网站开发 app开发,公众号代运营公司哪家好,电商实训网站建设报告,手机网站开发ios简介 也称发布订阅模式#xff08;Publish/Subscribe#xff09;#xff0c;定义对象间的一种一对多的依赖关系#xff0c;当一个对象的状态发生改变时#xff0c;所有依赖于它的对象都得到通知并被自动更新 UML图#xff1a; 应用场景#xff1a;
消息通知组件#x…简介 也称发布订阅模式Publish/Subscribe定义对象间的一种一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都得到通知并被自动更新 UML图 应用场景
消息通知组件邮件通知、广播通知、朋友圈、私信等当一个对象的改变需要同时改变其他对象且不知道具体有多少对象有待改变时
示例
观察者Observer
public interface Observer {/*** 更新状态*/void updateState();
}public class ConcreteObserver01 implements Observer {private String observerName;private Subject subject;public ConcreteObserver01(String observerName, Subject subject) {this.observerName observerName;this.subject subject;}Overridepublic void updateState() {System.out.println(subject.getAction() , observerName 进入工作状态);}
}public class ConcreteObserver02 implements Observer {private String observerName;private Subject subject;public ConcreteObserver02(String observerName, Subject subject) {this.observerName observerName;this.subject subject;}Overridepublic void updateState() {System.out.println(subject.getAction() , observerName 进入工作状态);}
}目标/主体Subject
public class Subject {private ListObserver observerList new ArrayList();private String action;public String getAction() {return action;}public void setAction(String action) {this.action action;}public void addObserver(Observer observer) {observerList.add(observer);}public void delObserver(Observer observer) {observerList.remove(observer);}public void notifyObserver() {for (Observer observer : observerList) {observer.updateState();}}}public class BossSubject extends Subject {
}运行
public class Main {public static void main(String[] args) {Subject bossSubject new BossSubject();Observer concreteObserver01 new ConcreteObserver01(01员工摸鱼, bossSubject);Observer concreteObserver02 new ConcreteObserver02(02员工摸鱼, bossSubject);bossSubject.addObserver(concreteObserver01);bossSubject.addObserver(concreteObserver02);bossSubject.setAction(老板开始巡视);bossSubject.notifyObserver();}
}总结 优点 观察者与被观察者是抽象耦合的降低了目标与观察者之间的耦合关系目标与观察者之间建立了一套触发机制 缺点 观察者与被观察者之间如果存在循环依赖可能会触发彼此之间的循环调用导致系统崩溃若一个被观察者对象存在大量观察者对象如果这些观察者对象都需要通知会耗费大量时间