設計模式 責任鏈模式 觀察者模式

2021-10-11 01:33:48 字數 1349 閱讀 5964

職責鏈模式(chain of responsibility,又叫責任鏈):使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。

1)在職責鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。

2)請求在這條鏈上傳遞,直到鏈上的某乙個物件處理此請求為止。

3)發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織鏈和分配責任。

責任鏈模式,我們來舉個例子,比如說,我是某乙個公司的員工,我想請假,比如,我想請一天假,我的經理就可以幫我處理,如果我想請三天假,那麼需要我的主管來處理,如果我想請假一周,那就需要副總來處理,如果我想請假乙個月,那就需要總經理來處理,就是說,責任鏈模式每個責任對應的處理許可權不一樣,直到找到那個能幫處理批假的那個功能才可以,比如說,我請三天假的時候經理就可以幫我處理,就不需要再往上找能處理此許可權的人來處理了,如果再往上找就會浪費時間和資源,那麼我如果請假三天,經理的許可權就不夠,就需要申請主管來處理,找能處理的人來處理,我請假一周的話,主管許可權也不夠,只能再往上找能處理此事的許可權人,如果我請乙個月的假,那副總的許可權也不夠,只能找到總經理來處理此事,但是這樣就會浪費很多的資源和時間,所以說這也是乙個缺點,責任鏈不夠靈活,而且還有一種情況是,如果我想請假的時候,正好能處理此事的人都在忙,而我的事情一直會得不到處理,那麼可能很多事情都將受到影響,放在系統裡來說就是影響效能了,就相當於說請求不一定會被處理,這是我對責任鏈模式一點略博的理解。

又稱發布–訂閱模式(有時又稱為模型(model)-檢視(view)模式、源-收聽者(listener)模式或從屬者模式)。觀察者模式完美的將觀察者和被觀察者的物件分離開,舉個例子,使用者介面作為觀察者,業務資料作為被觀察者,兩者之間存在「觀察」的邏輯,使用者介面觀察業務資料的變化,當被觀察者(業務資料)發生變化時,觀察者(使用者介面)就會觀察到到變化,並作出相應的響應。

觀察者模式:觀察者模式怎麼說呢,這個模式就相當於多個程式依賴於乙個程式的時候,這乙個程式進行改變的時候,別的程式都能看到這個程式裡面的變化,就相當於可見性很高,之前我們學到過乙個同步鎖,叫volatile鎖,這個鎖也是有很高的可見性,就是說,多個執行緒在同時執行乙個任務的時候,某乙個執行緒裡的資料進行改變的時候,那麼別的執行緒就也會看到這個資料的改變,防止了會重讀的問題,我感覺觀察者模式和這個同步鎖在某種程度上來說是一樣的,但是呢,我又感覺同步鎖有點像繼承,因為,他是當多個程式依賴於乙個程式的時候,這個被依賴的程式進行改變的時,這些依賴於這個程式的程式,就能知道,這個程式被改變了,而他們也隨之改變,所以我說比較像繼承,因為繼承就是多個子類繼承父類,得到父類的公共的方法和屬性,這些方法和屬性在被改變時,子類也能獲取到這些改變後的方法和屬性,所以我感覺觀察者模式是乙個在繼承的關係上又加了可見性。

責任鏈模式和觀察者模式

避免請求傳送者與接收者耦合在一起,讓多個物件都有可能接受請求,將這些物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。通過下面例子,當辦公室失火,會通知倉庫的保安,保安會通知整個大樓。抽象區域 public abstract class zone public void setpare...

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

設計模式 觀察者模式

觀察者模式定義了物件間一對多的依賴關係,乙個物件發生變化時,所有依賴它的物件都得到通知並被自動更新。本文主要闡述觀察者模式在分布式scada人機介面中的使用,利用這種模式使得人機介面顯示效率更高。發布者 郵局 觀察者 參與者 讀者 訂閱者 當郵局收到報社新雜誌的時候,即郵局狀態發生了改變,於是郵局把...