0%

設計模式 Design Pattern (四) 建造者模式(Builder Pattern)

前言

甚麼是創建者模式,將一個複雜對象的構建與他的表示分離,使得同樣的構建過程可以創建不同的表示。 一步一步創建一個複雜的對象,它允許用戶只通過指定複雜對象的類型和內容就可以建構它們,用戶不需要知道內部的具體建構細節。
建造者模式客戶端返回的不是一個簡單的產品,而是一個由多個部件組成的複雜產品。

組成

1.抽象建造者(Builder):為創建具體產品的具體建造者提供接口
2.具體建造者(ConcreteBuilder):建造具體產品
3.指揮者(Director):調用Builder接口來創建產品對象
4.產品角色(Product):具體產品

實作創建者模式

程式碼呈現

自動測試class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sealed class AutoTest{
private List<string> allCases = new List<string>()
public void addClass(string type)
{
allCases.Add(type);

public void TestAll()
{
Console.WriteLine("============ 開始執行測驗用例 ============");
foreach (var item in allCases)
{
Console.WriteLine(item);
}
Console.WriteLine("============ 執行測驗用例結束 ============");
}
}

Builder class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
abstract class Builder
{
protected AutoTest autoTest = new AutoTest();
abstract public void BuildTestCaseA();
abstract public void BuildTestCaseB()
public AutoTest GetAutoTest()
{
return autoTest;
}
}
class IntelTestCaseBuilder : Builder
{

public override void BuildTestCaseA()
{
autoTest.addClass("Intel測試A");
}
public override void BuildTestCaseB()
{
autoTest.addClass("Intel測試B");
}

}
class LenovoTestCaseBuilder : Builder
{

public override void BuildTestCaseA()
{
autoTest.addClass("Lenovo測試A");
}
public override void BuildTestCaseB()
{
autoTest.addClass("Lenovo測試B");
}

}

Director class

1
2
3
4
5
6
7
class Director {
public void Construct(Builder builder)
{
builder.BuildTestCaseA();
builder.BuildTestCaseB();
}
}

產生兩個品牌測試

1
2
3
4
5
6
7
8
9
10
11
12
13
static void Main(string[] args)
{
IntelTestCaseBuilder intelbuilder = new IntelTestCaseBuilder();
LenovoTestCaseBuilder lenovobuilder = new LenovoTestCaseBuilder();
Director director = new Director();
director.Construct(intelbuilder);
director.Construct(lenovobuilder);
AutoTest autoTest = intelbuilder.GetAutoTest();
AutoTest autoTest1 = lenovobuilder.GetAutoTest()
autoTest.TestAll();
autoTest1.TestAll();
Console.ReadLine();
}

顯示結果

result

結語

優點:

1.建造者獨立,易擴展。

2.便於控制細節風險。

缺點:

​1. 產品必須有共同點,範圍有限制。

​2. 如內部變化複雜,會有很多的建造類。