观察者设计模式

今天测试了一下观察者设计模式,把代码贴上来总结一下:
一共4个类,分别是subject、ConreateSubject、observer、ConcreateObserver和一个测试类
public abstract class Subject {
	private List<Observer>list=new ArrayList<Observer>();
	public void attach(Observer o){
		list.add(o);
	}
	public void detach(Observer o){
		list.remove(o);
	}
	public void nitify(){
		for(Observer o:list){
			o.Update();
		}
	}
}

public class ConcreteSubject extends Subject {
	private String subjectState;

	public String getSubjectState() {
		return subjectState;
	}

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

public abstract class Observer {
	public abstract void Update();
	    
}

public class ConcreteObserver extends Observer {

    private String observerState;//观察者的状态
    private String name;//观察者的名字
    private ConcreteSubject subject;//所观察的主题,这里通过构造获得引用,既可以获得主题的状态

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

	public ConcreteSubject getSubject() {
		return subject;
	}

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

	public String getObserverState() {
		return observerState;
	}

	public void setObserverState(String observerState) {
		this.observerState = observerState;
	}


	public  void Update()
    {
		observerState = subject.getSubjectState();
        System.out.println("The observer's state of "+name+" is"+observerState);
    }

}

public class testObserverPattern {
	public static void main(String[] args) {
		ConcreteSubject subject=new ConcreteSubject();
		ConcreteObserver t=new ConcreteObserver(subject, "观察者A");
		subject.attach(t);
		subject.attach(new ConcreteObserver(subject, "观察者B"));
		subject.attach(new ConcreteObserver(subject, "观察者C"));
		subject.setSubjectState("准备好了!");
		subject.nitify();
		System.out.println(t.getObserverState());
	}
}

测试结果:
The observer's state of 观察者A is准备好了!
The observer's state of 观察者B is准备好了!
The observer's state of 观察者C is准备好了!
The observer's state of 观察者A is准备好了!
The observer's state of 观察者B is准备好了!
The observer's state of 观察者C is准备好了!
准备好了!

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