import java.util.*; abstract class Subject { private ArrayList observers = new ArrayList(); public void attatch(Observer observer) { observers.add(observer); } public void detatch(Observer observer) { observers.remove(observer); } public void notifyObservers() { for (int i=0;i<observers.size();i++) { Observer observer = (Observer)observers.get(i); observer.update(); } } }
public class ConcreteSubject extends Subject { private String subjectState; public String getSubjectState() { return subjectState; } public void setSubjectState(String subjectState) { this.subjectState = subjectState; } }
abstract class Observer { abstract public void update(); }
public class ConcreteObserver extends Observer{ private String name; private String observerState; private ConcreteSubject subject; public ConcreteObserver(ConcreteSubject subject , String name) { this.subject = subject; this.name = name; } public void update() { observerState = subject.getSubjectState(); System.out.println("Observer " + name + "が新しい状態になりました"); } public ConcreteSubject getSubject() { return subject; } public void setSubject(ConcreteSubject subject) { this.subject = subject; } }
public class Client { public static void main(String[] args) { ConcreteSubject s = new ConcreteSubject(); s.attatch(new ConcreteObserver(s , "Observer1")); s.attatch(new ConcreteObserver(s , "Observer2")); s.attatch(new ConcreteObserver(s , "Observer3")); s.attatch(new ConcreteObserver(s , "Observer4")); s.setSubjectState("NEW"); s.notifyObservers(); } }
C:\JavaHello\Observer>java Client Observer Observer1が新しい状態になりました Observer Observer2が新しい状態になりました Observer Observer3が新しい状態になりました Observer Observer4が新しい状態になりました C:\JavaHello\Observer>