观察者模式
发布日期:2021-09-25 11:48:16 浏览次数:2 分类:技术文章

本文共 1936 字,大约阅读时间需要 6 分钟。

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时会通知所有观察者对象,使它们能够自动更新自己

Subject类,即主题或是抽象通知者,一般用一个抽象类或者一个接口实现,把所有对观察者对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象

package Observer;import java.util.*;abstract class Subject {	private List
observers=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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:synchronized
下一篇:外观模式

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月10日 23时13分54秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Sharding-Sphere,Sharding-JDBC_分库分表介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记002 2019-04-26
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_java.util.ConcurrentModificationException---Android原生开发工作笔记237 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
AndroidStudio_android实现双击_3击_监听实现---Android原生开发工作笔记240 2019-04-26
C++_类和对象_对象特性_初始化列表---C++语言工作笔记045 2019-04-26
AndroidStudio安卓原生开发_UI高级_DrawerLayout_侧滑菜单控件---Android原生开发工作笔记120 2019-04-26
AndroidStudio安卓原生开发_UI高级_Shape的使用_虚线_直线_矩形_渐变_径向渐变_线性渐变_扫描渐变---Android原生开发工作笔记122 2019-04-26
AndroidStudio安卓原生开发_UI高级_StateListDrawable状态选择器_按钮按下和抬起显示不同颜色---Android原生开发工作笔记124 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