设计模式-Observe

观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并被自动更新。

观察者模式的参与者:

1、Subject(目标),目标知道它的观察者。可以有任意多个观察者观察同一个目标。提供注册和删除观察者的接口。

2、Observer(观察者),为那些在目标发生改变时获得通知的对象定义一个接口。

3、ConcreteSubject(具体目标),将有关状态存入各具体目标,在具体目标的内部状态改变时,给所有登记过的观察者发出通知。

4、ConcreteObserve(具体观察者),维护一个指向ConcreteSubject对象的引用。储存有关状态,这些状态与目标的状态保持一致。



简单实现如下:

1、Subject,代码如下:

public interface Subject {
	public void register(Object object);
	public void remove(Object object);
	public void notifyObserve();
	public void setMeeting(String meeting);
}
2、ConcreteSubject,代码如下:

public class ConcreteSubject implements Subject {
	private List<Object> list = new ArrayList<Object>();
	private String meeting;
	
	@override
	public void register(Object object) {
		list.add(object);
	}
	
	@override
	public void remove(Object object) {
		list.remove(object);
	}
	
	@override
	public void notifyObserver() {
		for(Object object : list) {
			Observe observe = (Observe) object;
			observe.update(meeting);
		}
	}
	
	@override
	public void setMeeting(String meeting) {
		this.meeting = meeting;
		notifyObserver();
	}
	
}

3、Observe,代码如下:

public interface Observer {
	public void update(String info);
}

4、ConcreteObserver,代码如下:

public class ObserverA implements Observer {
	
	@override
	public void update(String info) {
		//收到通知后,ObserverA  doSomething
		System.out.println("ObserverA do something");
	}
	
}

public class ObserverB implements Observer {
	
	@override
	public void update(String info) {
		//收到通知后,ObserverB  doSomething
		System.out.println("ObserverB do something");
	}
	
}

5、客户端代码如下:

public static void main(String[] args) {
	Subject subject = new ConcreteSubject();
	Observer observerA = new ObserverA();
	Observer observerB = new ObserverB();
	subject.register(observerA);
	subject.register(observerB);
	subject.setMeeting("there have a change");
}

转载地址: http://blog.csdn.net/seablue_xj/article/details/5490563





你可能感兴趣的:(设计模式-Observe)