來說說創建模式

1.什麼是創建者模式?在什麼時候使用?

當我們要創建一個複雜的系統,並且這種系統由着特定的複雜的步驟組合而成,我們要怎麼辦?就像老闆要你去採購一批電腦,電腦的配置各有所不同,品牌也不同,而電腦由不同的部件組成,主板,內存,顯示器,機箱等組成,而你不肯能一個一個零件的去採購,然後在來組裝,這時候,我們就需要去找電腦城的老闆,去找不同品牌的老闆,讓老闆來給你組裝好成品的電腦,你只需要付錢就可以拿到不同的電腦,這就是一個常見的創建者模式,老闆就充當了Builder,從每個老闆那兒拿到不同的配置,不同品牌的電腦。好,我們來實現這個簡單的模式?

2.我們來實現這個系統

我們來實現電腦Class - Computer
/// <summary>
///  創建者模式
/// </summary>
public class Computer
{
	private IList<string> parts = new List<string>();

	//把單個組件添加到電腦組合中
	public void Add(string part)
	{
		parts.Add (part);
	}

	public void Show()
	{
		Debug.Log ("電腦開始組裝");
		foreach(string patrs in parts)
		{
			Debug.Log ("組件名稱:" + parts +"已經組裝好");
		}
		Debug.Log (" 電腦組裝結束");
	}
		
}
我們來實現一個抽象的接口class-Builder
/// <summary>
/// 電腦的組裝着
/// </summary>
public abstract class Builder
{
	//裝CPU
	public abstract void BuilderPartCPU ();

	//裝主板
	public abstract void BuildMainBoard();

	//獲得組裝好的電腦
	public abstract Computer getComputer();
}
我們在來實現兩個創建者 class - ConcreateBuilder1
/// <summary>
/// 具體的創建者
/// </summary>
public class ConcreateBuilder1 : Builder
{
	Computer computer = new Computer();
	public override void BuilderPartCPU()
	{
		computer.Add ("CPU1");
	}
	public override void BuildMainBoard()
	{
		computer.Add ("Main board1");
	}

	public override Computer getComputer ()
	{
		return computer;
	}
}
/// <summary>
/// 具體的創建者2
/// </summary>
public class ConcreateBuilder2 : Builder
{
	Computer computer = new Computer();
	public override void BuilderPartCPU()
	{
		computer.Add ("CPU2");
	}
	public override void BuildMainBoard()
	{
		computer.Add ("Main board2");
	}

	public override Computer getComputer ()
	{
		return computer;
	}
}

我們來實現一個導演類,也就是古代打仗的時候的將軍,他負責指揮整個戰鬥的進行。
public class Director
{
	public void Construct(Builder builder)
	{
		builder.BuilderPartCPU ();
		builder.BuildMainBoard ();
	}
}

我們來測試
public class Customer
{
	public void MainTest()
	{
		Builder builder1 = new ConcreateBuilder1 ();
		Builder builder2 = new ConcreateBuilder2 ();

		Director direct = new Director ();

		//老闆讓第一個人去組裝電腦
		direct.Construct (builder1);
		Computer comp1 = builder1.getComputer ();
		comp1.Show ();

		//老闆讓第二個人去組裝電腦
		direct.Construct(builder2);
		Computer comp2 = builder2.getComputer ();
		comp2.Show ();
	}
}

3。我們來說說他的特點。

(1)指揮者直接與客戶打交道,而客戶也絲毫不用關係產品的構造過程,指揮者把客戶的請求委託給每一個創建者。
(2)建造者模式主要用於“分步驟來構建一個複雜的對象”,其中“分步驟”是一個固定的組合過程,而複雜對象的各個部分是經常變化的(也就是說電腦的內部組件是經常變化的,這裏指的的變化如硬盤的大小變了,CPU由單核變雙核等
      (3)產品不需要抽象類,由於建造模式的創建出來的最終產品可能差異很大,所以不大可能提煉出一個抽象產品類
      (4)在前面文章中介紹的抽象工廠模式解決了“系列產品”的需求變化,而建造者模式解決的是 “產品部分” 的需要變化
      (5  由於建造者隱藏了具體產品的組裝過程,所以要改變一個產品的內部表示,只需要再實現一個具體的建造者就可以了,從而能很好地應對產品組成組件的需求變化



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章