设计模式之观察者模式
来源:互联网 发布:人生 不 快乐 知乎 编辑:程序博客网 时间:2024/06/04 23:35
时隔多日,终于想动手写了,内心一片狼藉、愧疚。废话就不多说了,直接上正题吧。
观察者模式
观察者模式(Observer)完美的将观察者(Observer)和被观察的对象(Observerable)分离开。有个例子很恰当,报社与订报人,只要订报人预定了报纸,一有新报纸,报社就会送达给订阅人。观察者模式思想也是如此,下面具体来说:
最基本的观察者模式包括两个接口(IObserverable和IObserver)及其对应的实现类(ObserverableImp和ObserverImp),IObserverable中定义了void registObserver(IObserver o);
,void removeObserver(IObserver o);
,void notifyObservers();
这三个方法;IObserver中定义了了void update();
这个方法,实现类只需实现相应的接口的方法即可。
下面开始翠花的爱情故事:
翠花是我们的被追求者(被观察者),张三、李四、王麻子是翠花的追求者(观察者),翠花知道他们三个暗恋者自己,所以一有什么事情,就通知他们三个,三个人的表现不尽相同,因此,翠花评判张三不够喜欢自己,于是就把张三移除了自己的追求者集合当中,当翠花再次考验他们的时候,当然就不会再通知张三了。
这样就实现了一个简单的观察者模式。具体代码如下:
IObserverable 接口:
public interface IObserverable { void registObserver(IObserver o); void removeObserver(IObserver o); void notifyObservers();}
IObserver 接口:
public interface IObserver { void update();}
IObserverable的实现类(被观察者):
public class ObserverableImp implements IObserverable{ //男朋友集合 private Set<IObserver> set; public ObserverableImp() { set = new HashSet<>(); } /** * 注册观察者 * 相当于翠花说,我知道了,o喜欢我 */ @Override public void registObserver(IObserver o) { set.add(o); } /** * 取消观察者 * 相当于翠花对o死心了 */ @Override public void removeObserver(IObserver o) { set.remove(o); } /** * 通知观察者 * 相当于翠花考验一波追求自己的人了 */ @Override public void notifyObservers() { for(IObserver o:set){ o.update(); } }}
IObserver 的实现类(观察者):
public class ObserverImp implements IObserver { private String message; public ObserverImp(String message) { this.message = message; } @Override public void update() { System.out.println(message); } public void setMessage(String message) { this.message = message; }}
测试类:
public class Test { public static void main(String[] args) { //翠花 ObserverableImp flower = new ObserverableImp(); //张三、李四、王麻子 ObserverImp zhangsan = new ObserverImp("我是张三,我好像有点喜欢翠花"); ObserverImp lisi = new ObserverImp("我是李四,我只喜欢翠花"); ObserverImp wangmazi = new ObserverImp("我是王麻子,翠花是我最心爱的人"); //张三、李四、王麻子分别向翠花说:我喜欢你 flower.registObserver(zhangsan); flower.registObserver(lisi); flower.registObserver(wangmazi); //翠花开始考验追求者了 flower.notifyObservers(); //翠花觉得李四说的话显得不够爱自己,干脆放弃张三了 flower.removeObserver(zhangsan); System.out.println("-------可爱的分割线---------"); //翠花再次考验追求者 flower.notifyObservers(); }}
输出结果:
我是王麻子,翠花是我最心爱的人我是张三,我好像有点喜欢翠花我是李四,我只喜欢翠花-------可爱的分割线---------我是王麻子,翠花是我最心爱的人我是李四,我只喜欢翠花
阅读全文
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 获取视频的某一帧
- 文章标题
- leetcode537. Complex Number Multiplication
- 设计模式–策略模式
- 孙鑫VC++学习:对话框-ONE
- 设计模式之观察者模式
- class, extends, super
- Spring Cloud构建微服务架构(五)服务网关
- dict语法 --鱼c工作室笔记
- poj 3253
- 高通平台中简单了解DTB
- 【人工智能】图像识别之小白天书——验证码篇(3)
- ARP协议【地址解析协议】
- ELK 日志分析系统(二)