设计模式(2)-----观察者模式
定义:The Observer Pattern defines a one-to-many dependency between objects so that when one object changes state, all of its dependents are notified and updated automatically. (观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新)
观察者模式有时又被称为发布/订阅模式,是软件模式中的一种。在此模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知,这通常透过呼叫各观察者所提供的方法来实现,此种模式通常用来坐事件处理系统。
观察者模式有两个接口:Subject(被观察者)和Observer(观察者)

Subject(被观察者接口):
定义了ConcreteSubject的统一接口
每个Subject可以有多个Observer
ConcreteSubject(具体被观察对象):
维护所有具体观察者的引用的列表
状态发生变化时会发送通知给所有注册的观察者
Observer(观察者接口)
定义了ConcreteObserver的统一接口
定义了一个update()方法,在被观察对象状态改变时会被调用
ConcreteObserver(具体观察者)
维护了一个对ConcreteSubject的引用
特定状态与ConcreteSubject同步
实现Observer接口,通过update()方法接受ConcreteSubject的通知
实例代码:
Subject .java
public interface Subject{
void attach(Observer observer);//添加观察者
void detach(Observer observer);//删除观察者
void inform();//通知所有观察者
}
ConcreteSubject .java
public class ConcereteSubject implements Subject {
public void attach(Observer observer){
observersVector.addElement(observer);
}
public void attach(Observer observer){
observersVector.removeElement(observer);
}
public void inform(){
//对observersVector中的所有元素调用其update方法
}
}
Observer.java
public interface Observer{
void update();//更新观察者
}
ConcreteObserver.java
public class ConcreteObserver implements Observer{
public ConcreteSubject consubject;
//在此添加ConcreteSubject引用
public ConcreteObserver(ConcreteSubject consubject);
{
this. Consubject = consubject;
consubject. attach (this);//添加观察者
}
public void update(){
}
}

浙公网安备 33010602011771号