一、概述

     观察者模式类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。先来看看关系图:

    

二、代码实现

一个Observer接口: Observer.java

public interface Observer{

	public void update();
}

 

两个实现类: Observer1.java、Observer2.java

public class Observer1 implements Observer{

	@Override
public void update(){
System.out.println("observer1 has received...");
} }
public class Observer2 implements Observer{

	@Override
public void update(){
System.out.println("observer2 has received...");
} }

 

Subject接口: Subject.java

public interface Subject{

	/*增加观察者*/
public void add(Observer observer); /*删除观察者*/
public void del(Observer observer); /*通知所有的观察者*/
public void notifyObservers(); /*自身的操作*/
public void operation();
}

 

实现类: AbstractSubject.java、MySubject.java

public class AbstractSubject implements Subject{

	private List<Observer> list = new ArrayList<Observer>();

	@Override
public void add(Observer observer){
list.add(observer);
} @Override
public void del(Observer observer){
list.remove(observer);
} @Override
public void notifyObservers(){
for(Observer observer : list){
observer.update();
}
} @Override
public void operation(){ }
}

 

public class MySubject extends AbstractSubject{

	@Override
public void operation(){
System.out.println("update self......");
notifyObservers();
}
}

 

测试:

	@Test
public void testObserver(){
MySubject mySubject = new MySubject();
mySubject.add(new Observer1());
mySubject.add(new Observer2());
mySubject.operation();
}

结果:

       update self......

       observer1 has received...

       observer2 has received...

最新文章

  1. leetcode
  2. 华为5700s配置链路聚合
  3. Try to write a script to send e-mail but failed
  4. 删除Json中的不需要的键值
  5. Javascript事件模型系列(四)我所理解的javascript自定义事件
  6. Glyphicons字体图标
  7. Javascript提升阶段学习
  8. SVO实时全局光照优化(里程碑MK0):Sparse Voxel Octree based Global Illumination (SVO GI)
  9. Spark核心概念
  10. Core Animation
  11. C#—Dev XtraTabControl动态增加Tab和关闭选项卡方法
  12. linux 解决Ubuntu编译内核uImage出现问题“mkimage” command not found - U-Boot images will not be built问题
  13. SPSS Modeler数据挖掘项目实战(数据挖掘、建模技术)
  14. 开源自己写的一个拖拽库,兼容到IE8+
  15. 【BZOJ2442】修建草坪(动态规划,单调队列)
  16. Centos 7 卸载自带的openjdk
  17. phpmock测试
  18. DAY1 练习
  19. Privoxy代理的使用
  20. jsp中的JSTL与EL表达式用法及区别

热门文章

  1. SQL SERVER的检查点checkpoint
  2. spring事务源码解析
  3. Laravel的ORM入门
  4. jquery小测
  5. Eclipse插件的各种安装方法
  6. DOM基础(四)
  7. JS入门(二)
  8. java算法 蓝桥杯(题+答案) 压缩变换
  9. KoaHub平台基于Node.js开发的Koa的调试实用程序
  10. 1179: [Apio2009]Atm