设计模式之观察者模式
2015-07-07 22:29
363 查看
观察者模式
定义一种一对多的依赖关系,让多个观察对象同时监听某一主题对象。这个主题对象在状态发生变化时会通知所有的观察者对象,使他们自动更新状态Subject
package com.hml.observer; import java.util.ArrayList; import java.util.List; public class Subject { List<Observer> observers = new ArrayList<Observer>(); public void addObserver(Observer o) { observers.add(o); } public void deleteObserver(Observer o) { observers.remove(o); } public void notifyChange() { for (Observer o : observers) { o.update(); } } }
Observer
package com.hml.observer; public interface Observer { public void update(); }
ConcreateObserverA
package com.hml.observer; public class ConcreateObserverA implements Observer { public void update() { System.out.println("A update"); } }
ConcreateObserverB
package com.hml.observer; public class ConcreateObserverB implements Observer { public void update() { System.out.println("B update"); } }
Test
package com.hml.observer; public class Test { public static void main(String[] args) { Subject subject = new Subject(); subject.addObserver(new ConcreateObserverA()); subject.addObserver(new ConcreateObserverB()); subject.notifyChange(); } }
类图
将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维护一致性而使各个类紧密耦合,这样会给维护、扩展和重用带来不便。而观察者模式的关键是主题Subject和观察者Observer,一个Subject可以有人以数量的依赖它的Observer,一旦Subject的状态发生了变化,所有的Observer都可以得到通知。Subject发出通知并不需要知道谁是他的观察者,也就是说,具体观察者是谁,他根本不需要知道。而任何一个具体的观察者都不知道也不需要知道其他观察者的存在。因此当一个对象的改变需要同时改变其他的对象时,就可以使用观察者模式。
相关文章推荐
- Mybatis学习总结之表的一对多关联查询问题
- ZXingObjC 64位 集成到自己的项目中(xcode 6.4)
- 读取USBHDD(USB移动硬盘信息)序列号的代码
- TEST_F:多个测试使用同样的配置
- Linux上安装Apache环境及安装过程报错解决方案(零初始环境)
- jdk安装和环境变量的配置
- FlashDevelop安装配置
- 导入Android项目出现invalid project description问题
- 【一些事晚报】周鸿祎:要一夜情的客户
- D-U-N-S申请流程
- [SaltStack] salt-master启动流程
- w7安装双系统
- if语句求三个数中最大的
- ios 保存本地数据的方法
- phpQuery—基于jQuery的PHP实现(转)
- 求连续子数组最大和问题的两种解法_PHP实现
- 【Go语言】【13】 4000 再谈GO语言的结构体
- 【Go语言】【13】再谈GO语言的结构体
- 《鸟哥的Linux私房菜》第六章 Linux的文件权限与目录配置
- c语言中的isalpha,isdigit,islower,isupper等一系列函数