觀察者模式(Observer)

2021-08-31 00:16:55 字數 2784 閱讀 1080

定義:觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有的觀察者物件,使它們能夠自動更新自己。

* @description: 抽象類

* @date:2018/11/4 23:12

*/public inte***ce isubject

/**

* @classname:observer

* @description:被觀察者

* @date:2018/11/4 23:13

*/abstract class observer

​    public observer(string name, isubject sub)

​    /**

* 更新被觀察者的狀態

* */

public abstract void update();

}

/**

* @classname:boss

* @description: 具體的通知者

* @date:2018/11/4 23:18

*/public class boss implements isubject

​    /**

* 改變老闆的狀態

* */

public void setaction(string action)

​    @override

public void attach(observer observer)

​    @override

public void detach(observer observer)

​    @override

public void notifyobserver() }}

/**

* @classname:secretary

* @description: 秘書,和老闆一樣,具有通知的作用,**與boss一致

* @date:2018/11/4 23:24

*/public class secretary implements isubject

​    @override

public void detach(observer observer)

​    @override

public void notifyobserver()

}

/**

* @classname:nbaobserver

* @description:

* @date:2018/11/4 23:35

*/public class nbaobserver extends observer

​    @override

public void update()

}

/**

* @classname:stockobserver

* @description:

* @date:2018/11/4 23:27

*/public class stockobserver extends observer

​    @override

public void update()

}

public class client

}

在這個例項中,仔細觀察之下,『』抽象通知者『』還是依賴"抽象觀察者",即萬一沒有了抽象觀察者這樣的介面,那麼通知的功能就不可用了。

在這個需求下面,由於『』抽象通知者『』不想依賴"抽象觀察者",那麼增加(add)和減少(detach)方法就不需要再繼續存在了。

委託是一種引用方法的型別,一旦為委託分配了方法,委託將於該方法具有完全相同的行為,委託方法的使用可以向其他任何方法一樣,具有引數和返回值。委託可以看做是對函式的抽象,是函式的「類」,委託的例項將代表乙個具體的函式。

事件委託,解決問題:乙個委託可以搭載多個方法,所有方法被一次喚起。更重要的是委託可以使得委託物件所搭載的方法並不需要屬於同乙個類,這樣我們就可以解開本來通知者與抽象觀察者的耦合。

委託依賴於動態的繫結過程,它可以要求特定的方法可以在執行的時候呼叫不同的**段。

接下來我們使用另外乙個具體的demo來分析事件委託:

乙個班級,有兩類學生,a類:不學習,玩,但是玩的東西不一樣,有的是做遊戲,有的是看電視

需求:當有老師來了的時候,那麼b類的學生立馬通知a類的學生,不管他們是在看電視還是在做遊戲。設計的要求如下,讓a類學生和b類學生完全解耦,即b類完全不知道a類的學生,卻可以通知a類的學生。

參考url:

當乙個物件的改變需要同時改變其他物件的時候,我們需要考慮使用觀察者模式,而且它不知道具體有多少個物件有待改變的時候,也應該適應觀察者模式。觀察者模式所做的工作就是解出耦合,讓耦合的雙方都依賴於抽象而不是依賴於具體,從而使得各自的變化不會影響另外一邊的變化。雖然在實際過程中,觀察者模式存在一定的缺陷,但是增加了事件委託這個特性之後,觀察者模式就是比較完美的了。從**中可以看到,事件委託的實現是基於簡單的反射的。

觀察者模式 Observer

個人理解 觀察者模式的核心是subject的attach和detach方法,載入observer物件 uml類圖 實現 public abstract class subject public void detach observer observer public void notify publ...

觀察者模式 ObServer

觀察者模式 observer 定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新 觀察者模式 observer 觀察者模式定義了一對多依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。讓主題物件在狀態發生變化時,會通知所有觀察者物件,讓他們能夠自動...

觀察者模式(OBSERVER)

觀察者模式是我選擇將其列出來的第乙個模式。看了這個模式的概念之後,有種豁然開朗的感覺。工作也由實踐上公升到了理論。平時使用的各種 net 控制項都使用了這種模式,將這種模式應用到組成乙個系統的各個元件中去,怎乙個 妙 字了得。理解了它之後,不竟又對 net 的框架敬佩有佳。不知道這其中隱藏了多少未知...