大话设计模式-----观察者模式
来源:互联网 发布:纸黄金行情软件 编辑:程序博客网 时间:2024/05/19 01:14
1 什么是观察者模式
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会收到通知并且自动更新。
2 一个例子
比如说定报纸
- 报社的业务就是出版报纸。
- 向某家报社订报纸,只要你是他们的订户,你就一直会收到新的报纸。
- 当你不想看报纸了,你就取消订阅。
- 只要报社没有倒闭,就会源源不断的有人订阅报纸或者取消订阅。
3 构成
观察者模式有两大组成,一个是:主题,也就是我们的报社,另外一个就是观察者,也就是我们的用户。如图:
3 例子
主题接口
public interface ISubject { public void registObserver(IObserver o); public void removeObserver(IObserver o); /** * 当主题改变时便会通知所有观察者 */ public void notifyObservers();}
观察者接口
public interface IObserver { /** * 当出新报纸了,主题便会调用这个方法,把新报纸内容传递过来。 * @param content */ public void update(String content);}
报纸类
public class NewsPaper implements ISubject { private ArrayList<IObserver> obs; private String content; @Override public void registObserver(IObserver o) { obs.add(o); } @Override public void removeObserver(IObserver o) { obs.remove(o); } @Override public void notifyObservers() { for (IObserver ob : obs) { ob.update(content); } } public NewsPaper() { obs = new ArrayList<IObserver>(); } /** * 出新报纸调用这个方法 * @param content */ public void publish(String content){ this.content = "新报纸出版了,内容是:"+content; notifyObservers(); }}
公司类(公司也可以订报纸)
public class Company implements IObserver { @Override public void update(String content) { System.out.println("公司收到了新报纸,"+content); }}
个人类
public class Person implements IObserver { @Override public void update(String content) { System.out.println("个人收到了新报纸,"+content); }}
测试类
public class MyTest { public static void main(String[] args) { NewsPaper newspaper = new NewsPaper(); Person person = new Person(); Company company = new Company(); // 订报纸 newspaper.registObserver(person); newspaper.registObserver(company); //发行报纸 newspaper.publish("周三的新报纸"); }}
0 0
- 大话设计-观察者模式
- 大话设计模式-观察者模式
- 大话设计模式-观察者模式
- 大话设计模式-观察者模式
- 大话设计模式-观察者模式
- 大话设计模式-----观察者模式
- 大话设计模式----观察者模式
- 大话设计模式之观察者模式
- 【大话设计模式】——观察者模式
- 【大话设计模式系列】之观察者模式
- 大话设计模式之观察者模式
- 《大话设计模式》 -- 13.观察者模式
- 大话设计模式之观察者模式
- linkin大话设计模式--观察者模式
- 大话设计模式之观察者模式
- 大话设计模式之观察者模式
- 大话设计模式—观察者模式
- 大话设计模式java版--观察者模式
- 数据结构实验之二叉树四:还原二叉树
- HDU 5800 To My Girlfriend(dp)
- codeforces 704A Thor [技巧吧.]
- 无法打开文件“libboost_log-vc100-mt-1_61.lib”
- EventBus源码阅读(18)-EventBus-总括
- 大话设计模式-----观察者模式
- python json转csv示例
- js垃圾回收机制
- java的参数传递1(基本数据类型)
- iOS计算某个日期n个月之后的日期
- android -- ProgressDialog
- HDU 5812 Distance
- Shell编程---source 和 ./ 和sh 运行脚本的区别 & 更新环境变量
- iOS手势缩放字体大小