標籤:style blog http ar java for sp 2014 c
定義:定義了一種一對多的依賴關係,讓多個觀察都對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。
結構圖:
範例程式碼:
public interface Observer {public void update();}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 notify1() {for (Observer observer : observers) {observer.update();}}}public class ConcreteSubject extends Subject {private String subjectState;public String getSubjectState() {return subjectState;}public void setSubjectState(String subjectState) {this.subjectState = subjectState;}}public class ConcreteObserver implements Observer {private String name;private String observerState;private ConcreteSubject subject;public ConcreteObserver(ConcreteSubject subject, String name) {this.subject = subject;this.name = name;}@Overridepublic void update() {// TODO Auto-generated method stubobserverState = subject.getSubjectState();System.out.println("觀察者" + name + "狀態是" + observerState);}}用戶端代碼如下:
public class Client {public static void main(String[] args) {ConcreteSubject s = new ConcreteSubject();s.attach(new ConcreteObserver(s, "x"));s.attach(new ConcreteObserver(s, "Y")); s.attach(new ConcreteObserver(s, "Y"));s.setSubjectState("ABC");s.notify1();}}
運行結果:
觀察者x狀態是ABC
觀察者Y狀態是ABC
觀察者Y狀態是ABC
設計模式之觀察者模式