對軟體構造中裝飾器設計模式的一點疑問

2021-10-06 16:55:08 字數 646 閱讀 1168

裝飾模式的設計理念主要是以對客戶端透明的方式動態擴充套件物件的功能,是繼承關係的乙個替代(繼承會產生大量的子類,而且**有冗餘)。裝飾模式可以在不創造更多子類的情況下,將物件的功能加以擴充套件。裝飾模式把客戶端的呼叫委派到被裝飾類。裝飾模式的關鍵在於這種擴充套件完全是透明的(裝飾模式的透明性要求客戶端程式不應該將物件宣告為具體構件型別或具體裝飾型別,而應該全部宣告為抽象構件型別)。

這樣decorator模式應運而生,即一種可以隨意組合穿搭的模式。

裝飾器的概念其實不難理解,但應用到實際當中時我發現這樣一種問題——它只能擴充套件某一函式的功能,而不能增加乙個新的功能函式。

搜尋網上的例子,如下所示。

可以看出,這些應用都有著這樣的共同點——它們都是在擴充套件某一函式的功能,而不是為adt增加函式。

實際上,後者才是我們更為切實的需求。顯然裝飾器模式並不能滿足這一需求,我認為它存在缺陷。

對裝飾器模式的理解

我們為什麼使用裝飾器模式?log 定義日誌輸出的方法 created by aq on 2018 7 11.public inte ce loggerloggercloud和loggerfilesystem為原有的結構 我們未對日誌功能進行拓展時已存在 created by aq on 2018 7...

設計模式 裝飾器模式的使用

問題 我們在進行軟體系統設計的時候,有一些業務 如下圖,一些通用的非功能性需求 是多個模組都需要的,是跨越模組的。把它們放到什麼地方呢?最簡單的辦法就是把這些通用模組的介面寫好,讓程式設計師在實現業務模組的時候去呼叫。這樣做的缺點是,日誌 安全 事務 統計效能等相關 幾乎把真正的業務 淹沒了。重複的...

設計模式之裝飾器模式的學習思考

裝飾器模式 decorator pattern 屬於設計模式裡的結構型模式一種。白話地說,我們可以給乙個類加一些它沒有的功能 比如 給乙個圓加上顏色 給手機增加上網的功能等等 它的實現思想 小例子 inte ce shape class rectangle implements shape clas...