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