设计模式学习笔记——观察者模式
来源:互联网 发布:淘宝网运动鞋女 编辑:程序博客网 时间:2024/06/11 12:09
1.基本简介
观察者模式(又被称作发布-订阅模式)是一种软件设计模式,在此模式中,一个目标可以管理所有依赖于它的观察者,当目标本身的状态改变时主动向所有观察者发出通知。
观察者模式将观察者和被观察的对象分开。面向对象设计的一个原则是单一职责原则,也就是说一个类只负责一种职责。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和可重用性。
2.模式中的角色
2.1 抽象主题:它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加或者删除观察者对象。
2.2 具体主题:将有关状态存入具体观察者对象,在具体主题内部状态改变事,给所有注册过的观察者发出通知。
2.3 抽象观察者:为所有的具体观察者定义的一个接口,在得到具体主题通知时更新自己。
2.4 具体观察者:实现抽象观察者角色所定义的更新接口,已便更改本身的状态
3.观察者模式的代码
//抽象主题角色 public interface IDataObservable { // 增加观察者 public void registerDataObserver(IDataObserver dataObserver); // 移除观察者 public void unRegisterDataObserver(IDataObserver dataObserver); // 向观察者(们)发出通知 public void notifyAllObserver(); // 观察者(们)收到通知后获取信息 public Object getObserverData(); } // 抽象观察者类,为所有具体观察者定义一个接口,在得到通知时更新自己 public interface IDataObserver { public void update(IDataObservable dataObservable); }
// 具体观察者或具体通知者,将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。 public class ConcreteSubject implements IDataObservable { private List<IDataObserver> mObserver=new ArrayList<IDataObserver>(); private Object mObject; @Override public void registerDataObserver(IDataObserver dataObserver) { mObserverList.add(dataObserver); } @Override public void unRegisterDataObserver(IDataObserver dataObserver) { mObserver.remove(mObserver); } @Override public void notifyAllObserver() { for (IDataObserver observer : (ArrayList<IDataObserver>) mObserverList.clone()) { observer.update(this); } } @Override public Object getObserverData() { return mObject; } } // 具体观察者,实现抽象观察者角色所要求的更新接口,已是本身状态与主题状态相协调 public class ConcreteObserver implements IDataObserver { public ConcreteObserver() { } // 实现抽象观察者中的更新操作 @Override public void update(IDataObservable dataObservable) { } }
0 0
- 设计模式学习笔记—观察者模式
- 设计模式学习笔记——观察者模式
- 设计模式学习笔记——观察者模式
- 《HeadFirst设计模式》学习笔记——观察者模式
- 设计模式学习笔记——观察者模式
- 设计模式学习笔记——观察者模式
- 《Head Frist 设计模式》学习笔记——观察者模式
- Head First设计模式学习笔记——观察者模式
- 设计模式学习笔记——观察者模式
- 设计模式学习笔记——Observer观察者模式
- 设计模式学习笔记——观察者模式
- 设计模式学习笔记——观察者(Observer)模式
- 学习笔记——JAVA设计模式<21>观察者模式
- 十、观察者模式——设计模式学习笔记
- 《设计模式》学习笔记7——观察者模式
- 设计模式学习笔记(七)—Observer观察者模式
- 设计模式笔记——观察者模式
- 设计模式学习— 观察者模式
- leetcode : jumpgame
- MAC地址和IP地址
- TYVJ1415 差分约束
- TPL——开始一个Task
- nodejs操作MSSQL两种方式--笔记
- 设计模式学习笔记——观察者模式
- pat1014 Waiting in line
- 357. Count Numbers with Unique Digits
- java运行顺序
- ubuntu 14.04 编译android6.01 (freescale-imx6)
- 什么是经验贝叶斯克里金插值法?
- Leetcode:Find the Difference
- Redis的文档
- 【iOS】苹果内购调研