觀察者(Observer)模式的定義:
指多個對象間存在一對多的依賴關係,當一個對象的狀態發生改變時,全部依賴於它的對象都獲得通知並被自動更新。這種模式有時又稱做發佈-訂閱模式、模型-視圖模式,它是對象行爲型模式。spa
觀察者模式是一種對象行爲型模式,其主要優勢以下:code
它的主要缺點以下:server
模式的結構
觀察者模式的主要角色以下。對象
//抽象目標 abstract class Subject { protected List<Observer> observers = new ArrayList<Observer>(); //增長觀察者方法 public void add(Observer observer) { observers.add(observer); } //刪除觀察者方法 public void remove(Observer observer) { observers.remove(observer); } public abstract void notifyObserver(); //通知觀察者方法 }
//具體目標 class ConcreteSubject extends Subject { public void notifyObserver() { System.out.println("具體目標發生改變..."); System.out.println("--------------"); for (Object obs : observers) { ((Observer) obs).response(); } } }
//抽象觀察者 interface Observer { void response(); //反應 }
//具體觀察者1 class ConcreteObserver2 implements Observer { public void response() { System.out.println("具體觀察者2做出反應!"); } }
public class ObserverPattern { public static void main(String[] args) { Subject subject = new ConcreteSubject(); Observer obs1 = new ConcreteObserver1(); Observer obs2 = new ConcreteObserver2(); subject.add(obs1); subject.add(obs2); subject.notifyObserver(); } } 實際案例