設計模式之組合模式(結構型)
阿新 • • 發佈:2019-01-14
文章目錄
模式意圖
介紹模式定義定義之前先介紹一下組合模式的意圖。其實就是將物件組合成整體-部分層次的樹形結構,客戶端呼叫時,對於呼叫容器物件或者說組合物件(“樹枝”)和單個物件(“樹葉”)是一致的。
模式定義
組合模式(Composite Pattern):組合多個物件形成樹形結構來表示“整體-部分”的結構層次。
組合模式又稱“整體-部分”(Part-Whole)模式,屬於物件結構型的設計模式。將物件組合在元件類裡,用於描述整體和部分的關係。組合模式對單個物件和組合物件或者說容器物件的使用具有一致性。
模式角色
組合模式包括如下角色:
- Component:抽象構件
- Leaf:葉子構件
- Composite:容器構件
- Client:客戶類
模式分析
組合模式定義一個抽象的構件類,主要用於被客戶端呼叫,客戶調呼叫時就不需要關心是單個物件還是容器物件了。
容器物件和抽象構件類是一種聚合關係,容器物件裡即可以包含葉子,也可以包含容器,遞迴組合,從而形成一個樹形結構。
實際例子
例子來自:《設計模式》一書
抽象構件類:
public abstract class Component { public abstract void add(Component c); public abstract void remove(Component c); public abstract Component getChild(int i); public abstract void operation(); }
葉子類:
public class Leaf extends Component
{
public void add(Component c)
{ //異常處理或錯誤提示 }
public void remove(Component c)
{ //異常處理或錯誤提示 }
public Component getChild(int i)
{ //異常處理或錯誤提示 }
public void operation()
{
//實現程式碼
}
}
容器類:
public class Composite extends Component { private ArrayList list = new ArrayList(); public void add(Component c) { list.add(c); } public void remove(Component c) { list.remove(c); } public Component getChild(int i) { (Component)list.get(i); } public void operation() { for(Object obj:list) { ((Component)obj).operation(); } } }
模式應用
組合模式應用
- XML文件解析
- JDK的AWT/Swing
…