观察者模式
程序员文章站
2022-07-12 20:37:04
...
观察者模式
观察者模式是一种常见的设计模式,当一个对象的行为依赖另一个对象的状态时,观察者模式就显得非常有用。观察者模式可以使用单线程,是某一个对象,及时得知自身所依赖者的状态的变化。
经典的观察者模式的一般实现如下:
1.主题接口:
package com.zendly.mode.observer; /** * 观察者主题接口 * @author zendly */ public interface ISubject { void attach(IObserver o);//添加观察者 void detach(IObserver o);//删除观察者 void inform();//通知所有观察者 }
2.观察者接口:
package com.zendly.mode.observer; import java.awt.Event; /** * 观察者接口,核心逻辑处理方法 * @author zendly */ public interface IObserver { void update(Event event); }
3.主题接口的实现:
package com.zendly.mode.observer; import java.awt.Event; import java.util.Vector; /** * 具体的主题接口的实现 * 这里我们通常使用一个Vector来维护观察者堆列 * @author zendly */ public class DetailSubject implements ISubject{ Vector<IObserver> os = new Vector<IObserver>(); @Override public void attach(IObserver o) { os.addElement(o); } @Override public void detach(IObserver o) { os.removeElement(o); } @Override public void inform() { Event e = new Event(new Object(), 1, new Object()); /*这里通知所有观察者*/ for (IObserver o : os) { o.update(e); } } }
4.具体观察者实现观察者接口:
package com.zendly.mode.observer; import java.awt.Event; /** * 具体观察者的实现,这里在接收到依赖对象的通知的时候, * 去执行实际要处理的逻辑 * @author zendly */ public class DetailObserver implements IObserver{ @Override public void update(Event event) { System.out.println("if received msg ,do it"); } }
由于观察者模式是如此的常见和实用,故JDK内部已经为开发者准备一套观察者模式对象,包括:java.util.Observable类和java.util.Observer接口,开发者可以实现它们完成自己的观察者模式的逻辑。