這周也算是完成任務學習了五個模式,週末繼續對本週學習的模式進行練習掌握,考完大物壓力少了很多~最後一週上課了,假期即將到來,wow~~今天學習建造者模式。
建造者模式(Builder)
定義:將一個複雜對象的構造與它的表示分離,使同樣的構建過程可以創建不同的表示,這樣的設計模式被稱爲建造者模式
角色:
Builder:爲創建一個對象的各個部件指定的抽象接口
ConcreteBuilder:具體建造者,實現Builder接口,構造和裝配各個部件。
Product:具體的產品角色
Director:構建一個使用Builder接口的對象
UML類圖:
應用場景:
主要應用於創建一些複雜的對象,這些對象內部構件間的建造順序通常是穩定的,但對象內部的構造通常面臨着複雜的變化。
創建的複雜對象的算法,獨立於該對象的組成部分,也獨立於組成部分的裝配方法時。
優點:
客戶端不必知道產品內部組成的細節。
具體的建造者類之間是相互獨立的,對系統的擴展非常有利。
由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任何影響
由於建造者隱藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要在定義一個具體的建造者就可以了。
實例代碼:
Builder.cs
abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
ConcreteBuilderA.cs
class ConcreteBuilderA : Builder
{
private Product product=new Product();
public override void BuildPartA()
{
product.Add("部件A!---------------");
}
public override void BuildPartB()
{
product.Add("部件B!---------------");
}
public override Product GetResult()
{
return product;
}
}
ConcreteBuilderB.cs
class ConcreteBuilderB : Builder
{
private Product product=new Product();
public override void BuildPartA()
{
product.Add("部件X!---------------");
}
public override void BuildPartB()
{
product.Add("部件Y!---------------");
}
public override Product GetResult()
{
return product;
}
}
Director.cs
class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
Product.cs
class Product
{
IList<string> parts = new List<string>();
public void Add(string part)
{
parts.Add(part);
}
public void show()
{
foreach (string part in parts)
{
Console.WriteLine(part);
}
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
Director director = new Director();
Builder b1 = new ConcreteBuilderA();
Builder b2 = new ConcreteBuilderB();
director.Construct(b1);
Product p1 = b1.GetResult();
p1.show();
Console.WriteLine("------------------------------------------");
director.Construct(b2);
p1 = b2.GetResult();
p1.show();
Console.ReadKey();
}
}