JDK與設計模式 組合模式

2021-07-13 16:23:45 字數 2290 閱讀 3743

1、組合模式

組合模式有時又叫部分-整體模式在處理類似樹形結構的問

題時比較方便,

組合多個物件形成樹形結構以表示具有「整體—部分」關係的層次結構。組合模式對單個物件(即葉子物件)和組合物件(即容器物件)的使用具有一致性,組合模式又可以稱為「整體—部分」(part-whole)模式,它是一種物件結構型模式。

在組合模式中引入了抽象構件類

component

,它是所有容器類和葉子類的公共父類,客戶端針對

component

進行程式設計。

組成:1) 

component(抽象構件):

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

2) leaf(葉子構件):

它在組合結構中表示葉子節點物件,葉子節點沒有子節點,它實現了在抽象構件中定義的行為。對於那些訪問及管理子構件的方法,可以通過異常等方式進行處理。

3) composite(容器構件):

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

類圖:

組合模式的關鍵是定義了乙個抽象構件類,它既可以代表葉子,又可以代表容器,而客戶針對該抽象構件類進行程式設計,無須知道它到底表示的是葉子還是容器,可以對其進行統一處理。

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

**:

abstract class component

class leaf extends component

@override

protected void add(component c)

@override

protected void remove(component c)

@override

protected component getchild(int i)

} class composite extends component

} @override

protected void add(component c)

@override

protected void remove(component c)

@override

protected component getchild(int i)

}

適用場景:

組合模式適用於具有整體與部分的層次結構中,希望通過一種方式忽略整體與部分的差異以便一致的對待他們的場景。或者乙個物件導向語言開發的系統中需要處理乙個樹形結構的場景同樣可以使用組合模式。

總結:組合模式使用物件導向的思想來實現樹形結構的構建與處理,描述了如何將容器物件和葉子物件進行遞迴組合,實現簡單,靈活性好。

通過組合模式

可以清楚地定義分層次的複雜物件,表示物件的全部或部分層次,它讓客戶端忽略了層次的差異,方便對整個層次結構進行控制,從而客戶端可以一致地使用乙個組合結構或其中單個物件,不必關心處理的是單個物件還是整個組合結構,簡化了**。

2、jdk中組合模式應用

jdk中awt包和swing包的設計是基於組合模式

,在這些界麵包中為使用者提供了大量的容器構件(如

container

)和成員構件(如

checkbox

、button

和textcomponent

等),他們都是繼承、關聯自抽象元件類component。

public abstract class component implements imageobserver, menucontainer,

serializable

else

}.....

.....

}public class button extends component implements accessible

public class container extends component

public void remove(component comp) }}

}}

結合JDK原始碼看設計模式 組合模式

方塊人 結合jdk原始碼看設計模式 組合模式 前言 相信大家都開啟過層級很多很多的資料夾。如果把第乙個資料夾看作是樹的根節點的話,下面的子資料夾就可以看作乙個子節點。不過最終我們尋找的還是資料夾中的檔案,檔案可以看做是葉子節點。下面我們介紹一種模式,與這種樹級結構息息相關。當然,今天的主角是hash...

組合模式 設計模式 組合模式

1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...

Python與設計模式 組合模式

class company name def init self,name self.name name def add self,company pass def remove self,company pass def display self,depth pass def listduty s...