定义对象之间的一种一对多依赖关系,使得每一个对象发生状态的变化时,其相关依赖对象皆得到通知并被自动更新,又称为发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。
当对象间存在一对多关系时,则使用观察者模式(observer pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。
结构图
结角色与理解
观察者模式共分为四种角色:subject(目标类):被观察的对象,内部定义一个观察者集合,并提供管理方法,定义通知方法notify()。concretesubject(具体目标类):继承目标类,实现notify中具体的方法,可省略。observer(观察者):对目标类做出的变化进行反应,一般为接口,声明更新方法update()。concreteobserver(具体观察者):继承观察者,一般持有指向具体目标类的引用,实现update方法,调用具体 目标类完成具体的业务操作。首先对目标类和观察者进行抽象以便后期对程序进行扩展,目标类持有观察者的引用,实现自身变化时对观察者更新方法的调用。核心代码
• 目标类
public abstract class abstractsubject { protected list observers = new arraylist(); public void attach(observer observer) { observers.add(observer); } public void detach(observer observer) { observers.remove(observer); } public abstract void notify(object args);}• 具体目标类public class concretesubject extends abstractsubject { @override public void notify(object args) { system.out.println(目标类更改了状态); for (observer observer : this.observers) { observer.update(); } }}• 观察类
public interface observer { void update();}• 具体观察类
@data@noargsconstructor@allargsconstructorpublic class concreteobserver implements observer { private string name; @override public void update() { system.out.println(this.name + 已更新); }}• 客户端
public class client { public static void main(string[] args) { abstractsubject as = new concretesubject(); as.attach(new concreteobserver(观察者a)); as.attach(new concreteobserver(观察者b)); as.attach(new concreteobserver(观察者c)); as.notify(); }}
盘点GaAs在光电子方面的应用及市场规模
Openwrt开发指南 第12章 添加OpenWrt软件包
了解针对CMOS图像传感器生产量身定制的制造工艺
中软国际与百度智能云合作助力中国企业数智化转型
华为要用Mate10狙击iPhone8,配置给力!
设计模式行为型:观察者模式
区块链+版权如何实现应用落地
京东方华灿持续深耕Micro LED领域
由MAX4104/4105/4304/4305构成的视频电缆驱动放大电路
VR技术是全球VR医疗市场增长的关键因素
双翻斗雨量计的功能特点
海尔智家2021份额25.1%蝉联第一 份额连涨创新高
澳洋顺昌预计LED业务出现亏损 净利大幅下滑
【11月28日|直播】对话专家:下一代 80Gbps USB4V2接口发展与测试挑战
华为云连接CC,为企业出海保驾护航
激战欧洲市场:中国电池厂商胜算几何?
怎么才能提高网络安全?军民融合才能建设好网络安全!
CES神吐槽:AI真的要“烂大街”了吗?
关于IO单元环设计的学习(1)
SRAM,SRAM原理是什么?