观察者模式[布道者]设计模式最新版
2023-06-13 09:13:28 时间
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主题Subject角色:
首先定义一个观察者数组,并实现增、删及通知操作。
它的职责很简单,就是定义谁能观察,谁不能观察
class Subject {
//观察者数组
private List<Observer> list = new ArrayList<>();
//增加一个观察者,相当于观察者注册
public void addObserver(Observer observer) {
this.list.add(observer);
}
//删除一个观察者
public void deleteObserver(Observer observer) {
this.list.remove(observer);
}
//通知所有观察者,主题有变化时通知观察者
public void notifyObserver() {
for(Observer observer : this.list) {
observer.response();
}
}
class ConcreteSubject extends Subject {
public void doSomething() {
System.out.println("具体目标发生改变...");
super.notifyObserver();
}
}
interface Observer {
public void response();
}
//具体观察者1
class ConcreteObserver1 implements Observer {
public void response() {
System.out.println("具体观察者1作出反应!");
}
}
//具体观察者1
class ConcreteObserver2 implements Observer {
public void response() {
System.out.println("具体观察者2作出反应!");
}
}
测试:
public static void main(String[] args) {
//创建一个主题
ConcreteSubject subject = new ConcreteSubject();
//定义一个观察者
Observer observer1 = new ConcreteObserver1();
Observer observer2 = new ConcreteObserver2();
//注册观察者
subject.addObserver(observer1);
subject.addObserver(observer2);
//开始活动
subject.doSomething();
}
相关文章
- 23种设计模式之装饰者模式
- 23种设计模式之访问者模式(Visitor Pattern)
- JavaScript 设计模式之组合模式
- C++ 23种设计模式(6)-适配器模式
- php 开发模式之工厂模式
- 单细胞数据库推荐 | TEDD:人和模式动物组织器官发育单细胞转录组与染色质可及性数据库
- 【设计模式 03】装饰模式
- 【设计模式 04】代理模式
- 漫谈模式之备忘录模式
- 开源模式反击之后,白嫖服务商竟然大叫“你不讲武德!”
- 设计模式之备忘录模式(行为型)详解架构师
- 代理模式(代理设计模式)详解
- Linux系统中阻塞模式的应用(linux阻塞方式)
- 快捷键来解决Linux全屏模式下的退出困境(linux如何退出全屏)
- Redis哨兵模式提升高可用性的可靠守护(什么是redis哨兵模式)
- Oracle数据库调整模式名的实现方式(oracle修改模式名)
- php设计模式Adapter(适配器模式)
- php设计模式之命令模式的应用详解
- JavaScript设计模式之代理模式介绍