设计模式之观察者模式
来源:互联网 发布:北京匡恩网络拖欠工资 编辑:程序博客网 时间:2024/06/15 09:18
设计模式之观察者模式
观察者对象Observer
目标对象Subject
观察者设计模式适用于用户订阅栏目,然后在每次发布新消息的时候自动给订阅用户发送消息。我这里拿天气预报做例子,天气
作为目标对象
,市民
作为观察者对象
每次在天气预报更新天气信息后,自动给订阅的市民推送天气预报
直接上代码
目标对象接口(Subject )
public interface Subject { void attach(Observer o); void remove(Observer o); void notifyObservers(String subjectState);}
目标对象类(SubjectImpl )实现目标对象接口
import java.util.ArrayList;import java.util.List;public class SubjectImpl implements Subject { private List<Observer> observerList=new ArrayList<Observer>(); private String subjectState; @Override public void attach(Observer o) { observerList.add(o); } @Override public void remove(Observer o) { observerList.remove(o); } @Override public void notifyObservers(String subjectState) { System.out.println("目标对象发送消息:"+subjectState); for (Observer o : observerList) { o.update(subjectState); } } public SubjectImpl() { super(); } public String getSubjectState() { return subjectState; } public void setSubjectState(String subjectState) { this.subjectState = subjectState; notifyObservers(subjectState); } }
观察者对象接口(Observer)
public interface Observer { void update(String subjectState);}
观察者对象类(ObserverImpl )实现观察者对象接口
public class ObserverImpl implements Observer { private String name; private String observerState; @Override public void update(String subjectState) { setObserverState(subjectState); } public ObserverImpl() { super(); } public ObserverImpl(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getObserverState() { return observerState; } public void setObserverState(String observerState) { this.observerState = observerState; System.out.println("观察者对象"+name+"接收到了:"+observerState); } }
测试观察者模式
public class TestObserverPattern { public static void main(String[] args) { ObserverImpl observer=new ObserverImpl("林飞凤"); ObserverImpl observer2=new ObserverImpl("涂志海"); SubjectImpl subject=new SubjectImpl(); subject.attach(observer); subject.attach(observer2); subject.setSubjectState("厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施"); }}
结果:
目标对象发送消息:厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施
观察者对象林飞凤接收到了:厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施
观察者对象涂志海接收到了:厦门天气预报:今天多云,局部可能会有中雨,请做好下雨措施
自己的一点点理解,如有不对,欢迎指正。
阅读全文
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- mongodb使用总结
- Oracle_2
- leetcode237题解
- 遍历Map的四种方法
- [NP] 8.9
- 设计模式之观察者模式
- 【Linux】中TCP_server的实现
- 无线AP人员定位实现调研以及方案编写
- IReport常见问题整理
- python 程序打包成exe
- poj2337 Catenyms【欧拉图】
- OpenGL: gluLookAt函数的含义
- 1对多业务,数据库水平切分架构一次搞定
- iOS 10.0的网络问题:设置使用无线局域网与蜂窝移动的应用