為什么使用composite模式


意圖:將對象組合成樹形結構以表示“部分---整體”的層次結構,本模式使得用戶對單個對象和組合對象的使用具有一致性。

     呵呵,說的很明白了 為了簡化 使用單個對象與組合對象時的復雜性。看了它的意圖應該可以理解不少了。

為什么使用?

    1:在開發中,客戶經常要對單個對象與組合對象 區別對待,這樣就導致客戶部分的代碼有復雜性的臭味。

    2:組合對象變化(如再組合一個單個對象)導致客戶部分的代碼發生變化,怎么辦?“抽象封裝變化”還記的嗎?

        用了這招就可以使客戶只依賴於抽象而不是實現,對單個對象和組合對象的使用具有一致性,而且還面向接口編程。

總結:

      1:本模式采用樹形結構來實現對象容器問題,這樣就可以將“一對N”的關系轉換為“一對一”的關系,使得客戶代碼可以一致地處理對象和對象容器,無需擔心處理的是單個對象還是一組對象。

      2:將“客戶代碼與復雜對象容器結構”解耦是本模式的核心思想,解耦之后就只與抽象接口發生依賴關系。

      3:是將“Add和remove等和對象容器相關的方法”定義在“表示抽象對象的component類”中,還是將其定義在“表示  對象容器的composite類“中,是一個關乎”透明性“和”安全性“的兩難問題,需要仔細權衡。有可能違背 職責單一 原則,    但這又是必須付出的代價。

       4:本模式在具體實現中,可以讓父對象的子對象反向追溯,如果父對象有頻繁的遍歷需求,可使用緩存技巧來改善效率。

       5:本模式在理解上應該比較容易,但實現的時候可能需要費不少心思,“透明”與“安全”需要仔細權衡


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com