**
设计模式之观察者模式
**
观察者模式(Observer Pattern)的定义
观察者模式,也叫做发布订阅模式(Publish/subscribe)
Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
(定义对象间一种一对多点依赖关系,使得每当一个对象改变状态,则所有依赖它的对象都会得到通知并且被自动更新。)
图解
优点
- 观察者和被观察者之间是抽象耦合
- 建立一套触发机制
代码
1.创建一个观察者的基类
public abstract class Observer {
protected abstract void update();
}
2.创建一个被观察者基类
public abstract class Subject {
//定义一个观察者数组
private Vector<Observer> observers = new Vector<>();
//注册观察者
public void attach(Observer o){
observers.add(o);
}
//注销观察者
public void detach(Observer o){
observers.remove(o);
}
//通知
public void notifyObservers(){
for (Observer o:
observers) {
o.update();
}
}
}
注意:这里不建议使用ArrayList,虽然ArrayList和Vector在使用方面没有什么太大的区别,ArrayList是线程异步,不安全;Vector是线程同步,安全——这点区别
3.创建一个观察者
public class ConcreteObserver extends Observer {
@Override
protected void update() {
System.out.println("得到通知");
}
}
4.创建一个被观察者
public class ConcreteSubject extends Subject {
public void doSomething(){
/**
* 活动
* */
System.out.println("哈哈,开始做事情了");
super.notifyObservers();
}
}
5.开始调用了
public class Demo {
@Test
public void test(){
Observer observer = new ConcreteObserver();
ConcreteSubject subject = new ConcreteSubject();
subject.attach(observer);
subject.doSomething();
}
}
被观察者绑定了观察者之后,每当被观察者做出了自己的操作,观察者都会受到相应的通知提醒。哈哈,你也来试试吧