java设计模式:观察者模式
2015-09-26 11:29
337 查看
转自:/article/1358567.html
。
OK。
。
/******************************************************************************* * Copyright (c) 2015, 2015 Hirain Technologies Corporation. ******************************************************************************/ package qqq; import java.util.Vector; /** * @Created Sep 26, 2015 10:53:17 AM * @Description * <p> * 抽象主题类:被观察者 */ abstract class Subject { /** * 一般一个被观察者拥有多个观察者,之所以使用Vector而不使用List, * 是因为多线程操作时,Vector在是安全的,而List则是不安全的 */ private final Vector<Observer> obs = new Vector<Observer>(); /** * @param obs * 添加的观察者 */ public void addObserver(final Observer obs) { this.obs.add(obs); } /** * @param obs * 移除的观察者 */ public void delObserver(final Observer obs) { this.obs.remove(obs); } /** * 依次通知所有观察者 */ protected void notifyObserver() { for (final Observer o : obs) { o.update();// 被观察者发生变化时,通知所有观察者;观察者接到通知后,在此做相应处理 } } /** * 抽象主题类(被观察者)的具体实现类需要实现此抽象方法, * 被观察者做完自己的时间后,notifyObserver()方法通知所有观察者 */ public abstract void doSomething(); }
/******************************************************************************* * Copyright (c) 2015, 2015 Hirain Technologies Corporation. ******************************************************************************/ package qqq; /** * @Created Sep 26, 2015 10:54:19 AM * @Description * <p> * 抽象主题类(被观察者)的具体实现类 */ class ConcreteSubject extends Subject { @Override public void doSomething() { System.out.println("被观察者事件反生");// 被观察者做完这件事后,需要通知所有观察者我做了这件事 notifyObserver();// 依次通知所有观察者 } }
/******************************************************************************* * Copyright (c) 2015, 2015 Hirain Technologies Corporation. ******************************************************************************/ package qqq; /** * @Created Sep 26, 2015 10:54:43 AM * @Description * <p> * 观察者接口 */ interface Observer { /** * 被观察者发生变化时,通知所有观察者;观察者接到通知后,在此做相应处理 */ public void update(); }
/******************************************************************************* * Copyright (c) 2015, 2015 Hirain Technologies Corporation. ******************************************************************************/ package qqq; /** * @Created Sep 26, 2015 10:55:04 AM * @Description * <p> * 观察者接口的 一个 具体实现类 */ class ConcreteObserver1 implements Observer { @Override public void update() {// 被观察者发生变化时,通知所有观察者;观察者接到通知后,在此做相应处理 System.out.println("观察者1收到信息,并进行处理。"); } }
/******************************************************************************* * Copyright (c) 2015, 2015 Hirain Technologies Corporation. ******************************************************************************/ package qqq; /** * @Created Sep 26, 2015 10:55:21 AM * @Description * <p> * 观察者接口的 一个 具体实现类 */ class ConcreteObserver2 implements Observer { @Override public void update() {// 被观察者发生变化时,通知所有观察者;观察者接到通知后,在此做相应处理 System.out.println("观察者2收到信息,并进行处理。"); } }
/******************************************************************************* * Copyright (c) 2015, 2015 Hirain Technologies Corporation. ******************************************************************************/ package qqq; /** * @Created Sep 26, 2015 10:55:41 AM * @Description * <p> * 测试类 */ public class Test { public static void main(final String[] args) { final Subject sub = new ConcreteSubject();// 定义一个被观察者 sub.addObserver(new ConcreteObserver1()); // 添加观察者1 sub.addObserver(new ConcreteObserver2()); // 添加观察者2 sub.doSomething();// doSomething()内部有notifyObserver()方法去通知所有观察者 } }
OK。
相关文章推荐
- java 之 反射
- java 声明和动态创建数组
- java从命令行接收多个数字,求和之后输出结果
- java se 知识点(一)
- 一个JAVA代码
- java多线程环境下对变量的读写操作的原子性问题
- java代码
- Java代码
- Spring管理事务实现方式
- 我的java代码
- java 代码中实现 TextView的 DrawableTop属性
- OpenJDK 阅读源代码 Java 实现字节流输入类
- 《深入理解java虚拟机》之内存管理
- Java理论学时第一节。课后作业。
- java 抽象类和接口
- Java上机课后实践
- test7.22
- optimizer for eclipse--Eclipse优化,让你的Eclipse快来飞!
- 第一课
- Java学习之多态