设计模式笔记——Observer

Observer Pattern 观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。主题对象发生状态变化时,会通知所有观察着,使它们能够更新自己。

 

当一个对象发生改变时,要同时改变其他对象,就用观察着模式


package observater.pattern;

public class ObserverPattern {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		ConcreteSubject subject=new ConcreteSubject();
		
		ConcreteObserver observer1=new ConcreteObserver("OBSERVER1",subject);
		ConcreteObserver observer2=new ConcreteObserver("OBSERVER2",subject);
		ConcreteObserver observer3=new ConcreteObserver("OBSERVER3",subject);
	
		subject.Attach(observer1);
		subject.Attach(observer2);
		subject.Attach(observer3);
		
		//subject.Detach(observer2);
		
		subject.setSubjectState("State1");
		subject.Notify();
		
		subject.setSubjectState("State2");
		subject.Notify();
		
	}

}

package observater.pattern;

public interface Observer {

	public void update();

}

package observater.pattern;

public class ConcreteObserver implements Observer {

	private String name;
	private String observerState;
	private ConcreteSubject subject; 
	
	public ConcreteObserver(String name,ConcreteSubject subject){
		this.name=name;
		this.setSubject(subject);
	}

	@Override
	public void update() {
		// TODO Auto-generated method stub
		this.observerState=subject.getSubjectState();
		System.out.println(name+"‘s state has changed to "+observerState);
	}


	public void setSubject(ConcreteSubject subject) {
		this.subject = subject;
	}

	public ConcreteSubject getSubject() {
		return subject;
	}

}

package observater.pattern;

import java.util.ArrayList;
import java.util.List;

public class Subject {
	
	private List<Observer> observers=new ArrayList<Observer>();
	
	public void Attach(Observer observer){
		observers.add(observer);
	}
	
	public void Detach(Observer observer){
		observers.remove(observer);
	}
	
	public void Notify(){
		for(Observer o:observers){
			o.update();
		}
	}

}

package observater.pattern;

public class ConcreteSubject extends Subject {

	private String subjectState;

	public void setSubjectState(String subjectState) {
		this.subjectState = subjectState;
	}

	public String getSubjectState() {
		return subjectState;
	}

}


posted @ 2012-08-14 16:50  Leeforall  阅读(160)  评论(0)    收藏  举报