1.什麼是創建者模式(構建者模式)?
創建者模式類似於一個步驟基本固定,但是每個步驟中的具體形式卻又可以變化的這類對象的創建。其中,創建者負責構建一個對象的各個部分,並且完成組裝的過程。如,做飯過程
2.意圖是什麼?
將類的構建邏輯轉移到類的實例化外部。
3.創建者模式解讀
1)類圖
2)角色分析
Product:所需要創建的對象類,由具體環境確定;
IBuild:創建工具接口/抽象類,包括對象組裝所需的所有步驟的接口聲明;
Build:創建工具具體實現類;Product對象作爲其成員;
Directr:引導者,來引導對象的具體組裝過程;而具體對象的創建還是靠對象本身提供的相應方法,Builder只是調用對象的方法完成組裝步驟;
Client:最終使用者。
4.創建者模式舉例
1)定義產品類
class Product {
List <string> parts = new List <string> ();
public void Add(string part) {
parts.Add(part);
}
public void Display() {
Console.WriteLine("\nProduct Parts -------");
foreach (string part in parts)
Console.Write(part);
Console.WriteLine();
}
}
2)定義創建工具接口
interface IBuilder {
void BuildPartA();
void BuildPartB();
Product GetResult();
}
3)定義創建工具具體實現類
class Builder1 : IBuilder {
private Product product = new Product();
public void BuildPartA() {
product.Add("PartA ");
}
public void BuildPartB() {
product.Add("PartB ");
}
public Product GetResult() {
return product;
}
}
class Builder2 : IBuilder {
private Product product = new Product();
public void BuildPartA() {
product.Add("PartX ");
}
public void BuildPartB() {
product.Add("PartY ");
}
public Product GetResult() {
return product;
}
}
4)定義引導者類
class Director {
// Builder uses a complex series of steps
public void Construct(IBuilder builder) {
builder.BuildPartA();
builder.BuildPartB();
builder.BuildPartB();
}
}
5)定義消費者類
public static void Main() {
// Create one director and two builders
Director director = new Director();
IBuilder b1 = new Builder1();
IBuilder b2 = new Builder2();
// Construct two products
director.Construct(b1);
Product p1 = b1.GetResult();
p1.Display();
director.Construct(b2);
Product p2 = b2.GetResult();
p2.Display();
Console.ReadKey();
}
1)構建者構建類對象的過程通常是分步驟的,這使得該模式通常被應用於解析文本以創建對象的場景。
2)具有依賴關係或者組合關係的對象的創建尤爲適合。
3)通常用在在構建解釋器和用戶界面上。