观察者模式
发布日期:2021-09-25 11:48:16
浏览次数:2
分类:技术文章
本文共 1936 字,大约阅读时间需要 6 分钟。
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新自己
Subject类,即主题或是抽象通知者,一般用一个抽象类或者一个接口实现,把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象
package Observer;import java.util.*;abstract class Subject { private Listobservers=new ArrayList ();// 增加观察者 public void attach(Observer observer){ observers.add(observer); }// 删除观察者 public void detach(Observer observer){ observers.remove(observer); } public void Notify(){ for(int i=0;i
Observer,抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接口,一般用一个抽象类或一个接口实现,更新接口通常包括一个update方法,叫做更新方法
package Observer;abstract class Observer { public abstract void update();}
ConcreteSubject类,具体主题或具体通知类,将有关状态存入具体观察者对象,在具体主题内部状态改变时,给所有登记过的观察者发出通知
package Observer;public class ConcreteSubject extends Subject{ private String subjectState; public String getSubjects(){ return subjectState; } public void setSubjects(String subjectState){ this.subjectState=subjectState; }}
ConcreteObserver,具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调
package Observer;public class ConcreteObserver extends Observer{ private String name; private String observerState; private ConcreteSubject subject; public ConcreteObserver(ConcreteSubject subject, String name){ this.subject=subject; this.name=name; } @Override public void update() { // TODO Auto-generated method stub observerState=subject.getSubjects(); System.out.println("观察者"+name+"的新状态是"+observerState); } public ConcreteSubject getSubject(){ return subject; } public void setSubject(ConcreteSubject value){ this.subject=value; } }
测试
package Observer;public class Test { public static void main(String[] args) { // TODO Auto-generated method stub ConcreteSubject s=new ConcreteSubject(); s.attach(new ConcreteObserver(s,"X")); s.attach(new ConcreteObserver(s,"Y")); s.attach(new ConcreteObserver(s,"Z")); s.setSubjects("ABC"); s.Notify(); }}
运行结果
观察者X的新状态是ABC观察者Y的新状态是ABC观察者Z的新状态是ABC持续更新。。。
转载地址:https://blog.csdn.net/Autumn03/article/details/80840100 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月10日 23时13分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++_类和对象_对象特性_构造函数的分类以及调用---C++语言工作笔记041
2019-04-26
C++_类和对象_对象特性_拷贝构造函数调用时机---C++语言工作笔记042
2019-04-26
C++_类和对象_对象特性_构造函数调用规则---C++语言工作笔记043
2019-04-26
C++_类和对象_对象特性_深拷贝与浅拷贝---C++语言工作笔记044
2019-04-26
AndroidStudio_android中实现对properties文件的读写操作_不把properties文件放在assets文件夹中_支持读写---Android原生开发工作笔记238
2019-04-26
弹框没反应使用Looper解决_the caller should invoke Looper.prepare() and Looper.loop()---Android原生开发工作笔记239
2019-04-26
Command line is too long. Shorten command line for Application---微服务升级_SpringCloud Alibaba工作笔记0067
2019-04-26
C++_类和对象_对象特性_初始化列表---C++语言工作笔记045
2019-04-26
kivy制作安卓APP--简单音乐播放器
2019-04-26
Angular2工程部署到Tomcat服务器,第一次访问正常,刷新浏览器后报404错误
2019-04-26
【力扣】155. 最小栈
2019-04-26
【力扣】160. 相交链表
2019-04-26
【力扣】167. 两数之和 II - 输入有序数组
2019-04-26
【力扣】168. Excel表列名称
2019-04-26