1. 程式人生 > >設計模式之組合模式(構建型)

設計模式之組合模式(構建型)

目錄

模式意圖

介紹模式定義定義之前先介紹一下組合模式的意圖。其實就是將物件組合成整體-部分層次的樹形結構,客戶端呼叫時,對於呼叫容器物件或者說組合物件("樹枝")和單個物件("樹葉")是一致的。

模式定義

組合模式(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
    ...