观察者模式(Observer)
来源:互联网 发布:网络短信免费版 编辑:程序博客网 时间:2024/05/21 10:40
观察者模式很好理解,类似于邮件订阅和RSS订阅,当我们浏览一些博客或wiki时,经常会看到RSS图标,就这的意思是,当你订阅了该文章,如果后续有更新,会及时通知你。其实,简单来讲就一句话:当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。先来看看关系图:
解释下这些类的作用:MySubject类就是我们的主对象,Observer1和Observer2是依赖于MySubject的对象,当MySubject变化时,Observer1和Observer2必然变化。AbstractSubject类中定义着需要监控的对象列表,可以对其进行修改:增加或删除被监控对象,且当MySubject变化时,负责通知在列表内存在的对象。我们看实现代码:
一个Observer接口:
public interface Observer {public void update();}两个实现类:
public class Observer1 implements Observer {@Overridepublic void update() {System.out.println("observer1 has received!");}}
public class Observer2 implements Observer {@Overridepublic void update() {System.out.println("observer2 has received!");}}Subject接口及实现类:
public interface Subject {/*增加观察者*/ public void add(Observer observer); /*删除观察者*/ public void del(Observer observer); /*通知所有的观察者*/ public void notifyObservers(); /*自身的操作*/ public void operation();}
public abstract class AbstractSubject implements Subject{private Vector<Observer> vector = new Vector<Observer>(); @Override public void add(Observer observer) { vector.add(observer); } @Override public void del(Observer observer) { vector.remove(observer); } @Override public void notifyObservers() { Enumeration<Observer> enumo = vector.elements(); while(enumo.hasMoreElements()){ enumo.nextElement().update(); } }}
public class MySubject extends AbstractSubject{@Override public void operation() { System.out.println("update self!"); notifyObservers(); }}测试类:
public class ObserverTest {public static void main(String[] args) { Subject sub = new MySubject(); sub.add(new Observer1()); sub.add(new Observer2()); sub.operation(); }}
参考资料:Java开发中的23种设计模式详解
- 观察者模式(OBSERVER)
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式(Observer)
- 观察者模式(Observer)
- Observer(观察者)模式
- 观察者模式(Observer)
- Observer(观察者模式)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者(Observer)模式
- 观察者模式(Observer)
- 观察者模式(Observer)
- Linux 搭建Nexus和Maven
- 编程实现数值积分
- MFC中非模态对话框的创建和销毁
- Win7中开机即报“资源管理器停止工作”
- actionbarsherlock学习(2)
- 观察者模式(Observer)
- java环境变量配置
- spring web 项目重新构建步骤
- 迭代器模式(Iterator)
- actionbarsherlock学习(3)
- DOM03---Location对象学习
- 责任链模式(Chain of Responsibility)
- ueditor在struts2下图片上传出错的问题的解决办法
- 命令模式(Command)