天天看點

Java觀察者模式以及與訂閱釋出者模式差別

設計模式複習,代碼是最好的說明。

定義:觀察者模式定義對象間一種一對多的依賴關系,使得當每一個對象改變狀态,則所有依賴于它的對象都會得到通知并自動更新,屬于行為類模式。

注意:觀察者模式和釋出訂閱模式是有差別的,差別在于觀察者模式是由目标進行排程,而釋出訂閱模式是由獨立的排程中心進行排程,可以說釋出訂閱模式是觀察者模式進一步解耦,在實際中被大量運用的一種模式。

UML:

Java觀察者模式以及與訂閱釋出者模式差別

代碼:

abstract class Subject{
    private Vector<Observer> vector = new Vector<Observer>();

    public void addObserver(Observer observer){
        this.vector.add(observer);
    }

    public void deleteObserver(Observer observer){
        this.vector.remove(observer);
    }

    protected void notifyObserver(){
        for (Observer observer:vector){
            observer.update();
        }

    }

    abstract void doSomething();
}


class ConcreteSubject extends Subject{

    void doSomething() {
        System.out.println("被觀察者事件發生");
        this.notifyObserver();
    }
}

interface Observer{

    void update();

}

class ConcreteObserver1 implements Observer{

    public void update() {
        System.out.println("觀察者1收到");

    }
}

class ConcreteObserver2 implements Observer{

    public void update() {
        System.out.println("觀察者2收到");

    }
}
           

參考連結

http://blog.csdn.net/itachi85/article/details/50773358

http://www.cnblogs.com/lovesong/p/5272752.html

http://geeksun.iteye.com/blog/2232298

如有錯誤,歡迎指出!