設計模式系列
建造者模式:將一個複雜物件的構建與它的表示分離,使得同樣的建構過程
可以建立不同的表示,建造者模式是一種物件建立型模式。
建造者模式是一步一步建立一個複雜物件,予許使用者通過指定複雜物件的型別
和內容可以構建它們,使用者不需要知道內部具體建造細節。
Builder-抽象建造者:建立一個產品Product物件的各個部件指定抽象介面,在該介面中一般宣告兩類方法,
一類方法是buildPartX(),它們用於建立複雜物件的各個部件;另一類方法是getResult(),
它們用於返回複雜物件。Builder既可以是抽象類,也可以是介面。
ConcreteBuilder-具體建造者:它實現了Builder介面,實現各個部件的具體構造和裝配方法,定義並明確它所建
立的複雜物件,也可以提供一個方法返回建立好的複雜產品物件。
●Product-產品角色:它是被構建的複雜物件,包含多個組成部件,具體建造者建立該產品的內部表示並定義它
的裝配過程。
Director-指揮者:指揮者又稱為導演類,它負責安排複雜物件的建造次序,指揮者與抽象建造者之間存在關聯
關係,可以在其construct()建造方法中呼叫建造者物件的部件構造與裝配方法,完成複雜物件
的建造。客戶端一般只需要與指揮者進行互動,在客戶端確定具體建造者的型別,並例項化
具體建造者物件(也可以通過配置檔案和反射機制),然後通過指揮者類的建構函式或者
Setter方法將該物件傳入指揮者類中。
class Program
{
static void Main(string[] args)
{
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
director.Construct(b1);
Product p1 = b1.GetResult();
p1.Show();
director.Construct(b2);
Product p2 = b2.GetResult();
p2.Show();
}
}
class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
class ConcreteBuilder1:Builder
{
Product product = new Product();
public override void BuildPartA()
{
product.Add("PartA");
}
public override void BuildPartB()
{
product.Add("PartB");
}
public override Product GetResult()
{
return product;
}
}
class ConcreteBuilder2:Builder
{
Product product = new Product();
public override void BuildPartA()
{
product.Add("PartX");
}
public override void BuildPartB()
{
product.Add("PartY");
}
public override Product GetResult()
{
return product;
}
}
class Product
{
List<string> parts = new List<string>();
public void Add(string part)
{
parts.Add(part);
}
public void Show()
{
Console.WriteLine("\nProduct Parts ----");
foreach (var part in parts)
{
Console.WriteLine(part);
}
}
}
優點:
1.客戶端程式不必知道產品內部組成細節,產品本身予產品創建過程解耦,使得相同創建過程創造不同產品物件
2.每一個建造者都是獨立與其他建造者無關,可以替換具體建造者或新增一個具體建造者,用戶使用不同的具體建造者
可得到不同產品對象
3.可以更加精細地控制產品創建過程
4.增加具體建造者無須修改原有代碼,只會遮類別針對抽象建造類,系統擴展方便,符合閉關原則
缺點:
1.建造者模式所創建的產品一般具有較多共同點,組成類似,產品之間差異很大不合適使用建造者模式,使用範圍
受到限制
2.如果產品內部變化複雜,可能定義更多具體建造者來實現這種變化,會讓系統變的龐大
元哥的筆記