观察者模式:当一个服务依赖另一个服务执行的状态时,不可能采用轮询方式获取最新状态,而是采用订阅者(观察者)-发布者(被观察者)模式来实现,类似主动通知。
上示例:
其中:
ISubject ------被观察者主题接口
public interface ISubject {
void attach(IObserver observer);
void detach(IObserver observer);
void inform();
}
ConcretSubject------真实的被观察者
public class ConcretSubject implements ISubject {
Vector<IObserver> observerVector=new Vector<IObserver>();
@Override
public void attach(IObserver observer) {
observerVector.add(observer);
}
@Override
public void detach(IObserver observer) {
observerVector.remove(observer);
}
@Override
public void inform() {
for (IObserver observerv:observerVector ) {
String d="";
observerv.update(d);
}
}
}
IObserver-------观察者接口
public interface IObserver {
void update(String ev);
}
Observer-------观察者
public class Observer implements IObserver {
@Override
public void update(String ev) {
System.out.println("oberved");
}
}
客户都调用:
ConcretSubject subject=new ConcretSubject();
observer.Observer observer=new Observer();
subject.attach(observer);
subject.inform();
subject.detach(observer);
subject.inform();
过程:
1.新建一个被发布者(被观察者)和订阅者 (观察者)
2.然后将订阅者注册到发布者中的vector实现的订阅者列表
3.然后发布者发布新动态,并通知所有订阅者