观察者模式
2016-04-09 09:22
281 查看
观察者模式
谈谈我对观察者模式的理解吧 1、首先它是一种一对多依赖关系,可以定义一个借口做为观察者,让观察者去监听某个主体对象,当这个主体对象状态或者数据发生改变时,观察者通知与它绑定或者注册过该接口的观察者对象,使它们自己自动更新自己 2、优点: 观察者模式解除了主题和具体观察者的耦合,让耦合的双方都依赖于抽象,而不是依赖具体。从而使得各自的变化都不会影响另一边的变化。 3、缺点:依赖关系并未完全解除,抽象通知者依旧依赖抽象的观察者。 4、适用的地方: 1 当一个对象发生改变需要改变其它对象时,而且不知道具体有多少个对象有待改变时。 2一个抽象某型有两个方面,当其中一个方面依赖于另一个方面,这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立地改变和复用。
这里写代码片 `` //观察者 public interface HaoLiYou { void dataChange(String s);} /** * 被观察的对象, 持有数据的对象 */ public class BeiGuanChaZhe { private List<HaoLiYou> liYouList = new ArrayList<>(); //增加观察着对象 public void add(HaoLiYou haoLiYou) { liYouList.add(haoLiYou); } //移除观察者对象 public void remove(HaoLiYou haoLiYou) { liYouList.remove(haoLiYou); } // 向观察者对象(们)发出通知 public void change(String s) { for (HaoLiYou haoLiYou : liYouList) { haoLiYou.dataChange(s); } } }
//观察者对象其他的对象都一样,就写了一个观察者对象,让他们去实现观察者那个接口就可以 public class A implements HaoLiYou{ public void dataChange(String s ){ System.out.println(getClass().getName()+s); } //测试类 public class Test { public static void main(String[] args) { BeiGuanChaZhe beiGuanChaZhe = new BeiGuanChaZhe(); E e = new E(); beiGuanChaZhe.add(new A()); beiGuanChaZhe.add(new B()); beiGuanChaZhe.add(new C()); beiGuanChaZhe.add(new D()); beiGuanChaZhe.add(e); beiGuanChaZhe.change("aadasdas"); beiGuanChaZhe.remove(e); beiGuanChaZhe.change("aadasdas"); }
}
相关文章推荐
- SQL中N+1问题已经MyBaits中的解决方案
- VMWare Workstation中实现Win7和linux虚拟机之间的文件共享
- lua 表赋值是引用关系
- nyoj 325 zb的生日【0-1背包】
- String
- java路径问题总结
- 一个jQuery事件绑定的问题
- 杨辉三角形
- hdoj 1203 I NEED A OFFER!【0-1背包+逆向思维】
- float类型进行计算精度丢失的问题
- LINUX内核分析第七周——可执行程序的装载
- ssl2334 铲雪车
- 约瑟夫环问题
- Java中resourceBundle和Properties的区别
- bootstrap 下拉菜单精简版
- 创业公司和大公司的差异
- document.frame
- nyoj 890 又见01背包【0-1背包+逆向思维】
- java调用存储过程和函数
- 【MongoDB】TTL时效集合