【设计模式】观察者模式 详解

概述:
观察者 = 发布者 + 订阅者
订阅者 会 时刻(或 间断)、直接(或 简介) 地 监视 发布者 的 动作 和 状态,
最终对于 特定的动作 或 特定的状态 会 做出响应
使用展示:
现在,本人来给出一个 被订阅者类:
被订阅者 类:
package edu.youzg.design.pattern.observer;
/**
* @Author: Youzg
* @CreateTime: 2021-05-10 20:43
* @Description: 带你深究Java的本质!
*/
public class IdolInfo {
public String idolName;
public IdolInfo(String idolName) {
this.idolName = idolName;
}
public String getIdolName() {
return idolName;
}
}
本人再来给出一个 粉丝类:
订阅者 类:
package edu.youzg.design.pattern.observer;
/**
* @Author: Youzg
* @CreateTime: 2021-05-10 20:44
* @Description: 带你深究Java的本质!
*/
public class FanInfo {
private int id;
public FanInfo(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
现在,本人给出一个 注册中心/通知器:
发布者 类:
package edu.youzg.design.pattern.observer;
import java.util.ArrayList;
/**
* @Author: Youzg
* @CreateTime: 2021-05-10 20:42
* @Description: 带你深究Java的本质!
*/
public class Registry {
ArrayList<FanInfo> fans = new ArrayList<>();
ArrayList<IdolInfo> idols = new ArrayList<>();
// 添加 粉丝
public void addFan(FanInfo fan) {
fans.add(fan);
}
// 添加 偶像活动
public void addIdol(IdolInfo idol) {
idols.add(idol);
//通知
sendNoticeToFan(idol, fans);
}
// 发布 偶像活动
private void sendNoticeToFan(IdolInfo idol, ArrayList<FanInfo> fans) {
for (FanInfo fan : fans) {
System.out.println(fan.getId() + "号粉丝,您好,偶像" + idol.getIdolName() + "今晚有演唱会,望准时参加!");
}
}
}
现在,本人再来给出一个 测试类:
测试类:
package edu.youzg.design.pattern.observer;
/**
* @Author: Youzg
* @CreateTime: 2021-05-10 20:39
* @Description: 带你深究Java的本质!
*/
public class YouzgTest {
public static void main(String[] args) {
FanInfo fan1 = new FanInfo(12580);
FanInfo fan2 = new FanInfo(8080);
FanInfo fan3 = new FanInfo(6666);
FanInfo fan4 = new FanInfo(9000);
Registry registry = new Registry();
registry.addFan(fan1);
registry.addFan(fan2);
registry.addFan(fan3);
registry.addFan(fan4);
registry.addIdol(new IdolInfo("Youzg"));
}
}
现在,本人展示下 运行结果:
运行结果:

观察者模式 与 发布订阅模式:
我们在 23种设计模式 中,可以发现是没有 发布-订阅模式 的,而且也没有 生产者-消费者模式
这是因为:
我们可以把 23种设计模式 理解为 初始设计模式
其它各种模式,都是由着 23种设计模式 组合 或 衍生 而 诞生的设计模式
而且 23种设计模式 本身又存在着 组合 或 衍生 的关系
就像我们实现一个功能,可以选择不同的架构模式一样,
实现一种设计模式的概念,我们也可以 通过不通的实现手段
因此,我们可以理解为:
23种设计模式 只是 最基本的设计模式
(其实本人在最近有所悟,23种设计模式 大多数本质上就是 花式玩接口,以及 6大设计原则 的 花式实现)
而 无论是在 分布式架构,还是在 许多 中间件设计 中,发布-订阅模式,都十分重要!
那么,至此,观察者模式 就讲解完毕了!

浙公网安备 33010602011771号