设计模式之观察者模式
来源:互联网 发布:rimworld mac a14 编辑:程序博客网 时间:2024/06/05 22:39
观察者模式又叫做发布-订阅(Publish/Subscribe)模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察对象,使它们能够更新自己。
Subject类、可翻译为主题或通知者,一般用一个抽象类或者接口实现。它把所有对观察着对象的引用保存在一个聚集里,每个主题都可以有任意数量的观察者。
public abstract class Subject { private ArrayList<Observer> observers=new ArrayList<Observer>(); //增加观察者 public void Attach(Observer observer) { observers.add(observer); } //移除观察者 public void Detch(Observer observer) { observers.remove(observer); } //通知 public void Notify() { for(Observer observer:observers) { observer.Update(); } }}
Observer类,抽象观察者,为所有的具体观察者定义一个更新方法(抽象方法,由具体观察者自己去实现)
public abstract class Observer { public abstract void Update();}
ConcreteSubject类,叫做具体主题或者具体通知者,将有关状态存入具体观察者对象;在具体的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。
public class ConcreteSubject extends Subject{ private String subjectState; public String getSubjectState() { return subjectState; } public void setSubjectState(String subjectState) { this.subjectState = subjectState; }}
ConcreteObserver类,具体观察者,实现抽象观察者角色所要求的更新方法,以便使本身的状态与主题的状态相协调。具体观察者角色可以保存一个指向具体主题对象的引用。
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() { observerState=subject.getSubjectState(); System.out.println("观察者"+name+"检测到主题的状态是"+observerState); } public ConcreteSubject getSubject() { return subject; } public void setSubject(ConcreteSubject subject) { this.subject = subject; }}
main 函数代码
public static void main(String[] args) { ConcreteSubject s=new ConcreteSubject(); ConcreteObserver X=new ConcreteObserver(s, "X"); ConcreteObserver Y=new ConcreteObserver(s, "Y"); ConcreteObserver Z=new ConcreteObserver(s, "Z"); s.Attach(X); s.Attach(Y); s.Attach(Z); s.setSubjectState("Running"); s.Notify(); }
运行结果:
观察者X检测到主题的状态是Running
观察者Y检测到主题的状态是Running
观察者Z检测到主题的状态是Running
阅读全文
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- sql sever客户端连接的问题
- 连接数据库错误
- Web前端开发最佳实践总结三:CSS最佳实践
- 椒盐噪声的图片 利用中值滤波效果好
- 单例模式的基本运用
- 设计模式之观察者模式
- NOI模拟(10.29)T3 颜色
- [地图]仿射变换矩阵
- maven创建eclipse工程
- 2017.10.30
- Django Admin管理工具
- centos7 javaweb 链接中文请求tomcat乱码问题解决
- LeetCode110. Balanced Binary Tree
- NLP07-Gensim源码简析[MmCorpus&SvmLightCorpus]