設計模式 結構型設計模式 6 組合模式(php)

2021-10-10 03:57:56 字數 1120 閱讀 7632

結構型設計模式

組合模式

組合模式(composite pattern)屬於類的結構型模式之一,在樹型結構中,組合模式定義了乙個抽象構建類,它既可以代表葉子,又可以代表容器(子節點),而客戶端針對該抽象構建類進行程式設計,無需知道它道理表示的是葉子還是容器,可以對其進行統一處理。

同時容器物件與抽象構件類之間還建立了乙個聚合關聯關係,在容器物件中即可以包含葉子,也可以包含容器,一次實現遞迴組合,形成乙個樹形結構。

1、component抽象構件角色:

介面或抽象類,為葉子構建和容器構建宣告介面,在該角色中可以包含所有子類共有行為的宣告和實現。在抽象構建中定義了訪問及管理它的子構建的方法,如增加子構建,刪除子構建,獲取子構建等。

2、leaf葉子構件角色:

他在組合結構中表示葉子節點物件,葉子節點沒有子節點,它實現了在抽象構建中定義的行為。對於介面中定義的其他管理子構建的方法,通常是空處理或拋異常處理。

3、composite容器構件:

他在組合結構中表示容器節點,它提供乙個集合,用於儲存子節點,實現了在抽象介面中定義的行為,包括那些訪問及管理自構建的方法,在其業務方法中可以使用遞迴呼叫其子節點的業務方法

//遞迴

public void runtestcase() }

介面使用:

安全組合模式

透明組合模式

設計模式更注重透明性,安全性問題採用異常、空處理

1、在具有整體和部分的層次結構的物件組合中,希望通過一種方式忽略整體與部分的差異,客戶端可以一致的對待它們

2、物件導向語言開發中需要處理乙個樹形結構

3、在乙個系統中能夠分離出葉子物件和容器物件,而且它們的型別不固定,需要增加一些新的型別

1、清楚的定義分層次的複雜物件,讓客戶端忽略了層次的差異,方便對整個層次結構進行控制

2、擴充套件新的容器構件和葉子構件都很容易,無需修改原有的類庫,並且可以保持原來的層次結構體系,符合「開放封閉」原則

1、比較難以對構件型別進行限制,當業務發生變化時,我們希望對某些容器構件所接收的子構件加以限制,但所有構件繼承了相同的介面,因此需要在執行時進行構件的判斷,實現過程比較複雜。

設計模式系列(結構型模式)之四 組合模式

將物件組合成樹形結構以表示 部分 整體 的層次結構,使客戶端對單個物件和組合物件保持一致的方式處理。適用於 客戶端可以忽略組合物件與單個物件的差異 處理樹形結構資料。優點 層次清晰 客戶端不必關係層次差異,方便控制 符合開閉原則。缺點 樹形處理較為複雜。組合模式分為透明式的組合模式和安全式的組合模式...

設計模式 結構型 組合模式

將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有唯一性。對於樹形結構,當容器物件 如資料夾 的某乙個方法被呼叫時,將遍歷整個樹形結構,尋找也包含這個方法的成員物件 可以是容器物件,也可以是葉子物件 並呼叫執行,牽一而動百,其中使用了遞迴呼叫的機制來...

結構型 3 組合模式

1.模式機動 資料夾 容器 container 檔案 葉子 leaf 如何將容器物件和葉子物件進行遞迴組合,使得使用者在使用時無須對它們進行區分,可以一致地對待容器物件和葉子物件?組合模式 2.模式定義 3.模式結構 組合模式包含如下角色 模式結構 檔案系統組合模式結構圖 透明組合模式 水果盤 例項...