观察者模式
//观察者模式
//CopyRight(C) CAnca software Office.2006
//Created by CAnca.
import java.util.*;
public class ObserverMode{
public static void main(String[] args){
// Configure Observer pattern
concreteSubject s = new concreteSubject();
s.Attach(new concreteObserver(s,"X"));
s.Attach(new concreteObserver(s,"Y"));
s.Attach(new concreteObserver(s,"Z"));
// Change subject and notify observers
s.setSubjectState("ABC");
s.DIYnotify();
}
}
//Subject
abstract class Subject{
private ArrayList observers = new ArrayList();
public void Attach(Observer observer){
this.observers.add(observer);
}
public void Detach(Observer observer){
this.observers.remove(observer);
}
public void DIYnotify(){
for(int i = 0 ; i < this.observers.size() ; i++){
Observer observer = (Observer)observers.get(i);
observer.Update();
}
}
}
//Observer
abstract class Observer{
abstract void Update();
}
//concreteObserver
class concreteObserver extends Observer{
private String observerState;
private concreteSubject subject;
private String name;
public concreteObserver(concreteSubject subject,String name){
this.name = name;
this.subject = subject;
}
public void Update(){
this.observerState = subject.getSubjectState();
System.out.println("Observer " + name + "'s new state is " + observerState);
}
}
//concreteSubject
class concreteSubject extends Subject{
private String subjectState;
public void setSubjectState(String state){
subjectState = state;
}
public String getSubjectState(){
return subjectState;
}
}