目標(biāo):將一個(gè)復(fù)雜對(duì)象的構(gòu)建與表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 使用場(chǎng)景:典型的KFC兒童餐包括一個(gè)主食,一個(gè)輔食,一杯飲料和一個(gè)玩具(例如漢堡、炸雞、可樂(lè)和玩具車)。這些在不同的兒童餐中可以是不同的,但是組合成兒童餐的過(guò)程是相同的。 優(yōu)點(diǎn): 使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)。 具體的建造者類之間是相互獨(dú)立的,對(duì)系統(tǒng)的擴(kuò)展非常有利。 由于具體的建造過(guò)程的獨(dú)立的,因此可以對(duì)建造過(guò)程逐步細(xì)化,而不對(duì)其他模塊產(chǎn)生影響。
實(shí)現(xiàn): Builder:抽象建造者。他聲明為創(chuàng)建一個(gè)Product對(duì)象的各個(gè)部件指定的抽象接口。 ConcreateBuilder:具體建造者。實(shí)現(xiàn)抽象接口,構(gòu)建和裝配各個(gè)部件。 Director:指揮者。構(gòu)建一個(gè)使用Builder接口的對(duì)象。它主要是用于創(chuàng)建一個(gè)復(fù)雜的對(duì)象,它主要有兩個(gè)作用,一是:隔離了客戶與對(duì)象的生產(chǎn)過(guò)程,二是:負(fù)責(zé)控制產(chǎn)品對(duì)象的生產(chǎn)過(guò)程。 Product:產(chǎn)品角色。一個(gè)具體的產(chǎn)品對(duì)象。

public class BuilderTest
{
/***
* 抽象的建造者只關(guān)心對(duì)象有哪些步驟,
* 具體的建造者只關(guān)心如何實(shí)現(xiàn)每一個(gè)具體的步驟,
* 指揮者只關(guān)心構(gòu)建的順序,
* 三方各司其職,很好的隔離了構(gòu)建對(duì)象的步驟和順序,
* 一但指揮者和建造者確定了,開(kāi)發(fā)者只需要關(guān)心如何實(shí)現(xiàn)和更新具體步驟就行了,
*/
public static void Test()
{
Builder builder1 = new ConcreteBuilder();
Director director = new Director(builder1);
director.Consttruct();
var product = builder1.GetResult();
product.Show();
}
/// <summary>
/// 抽象的建造者,定義了建造者的執(zhí)行步驟
/// </summary>
public abstract class Builder
{
/// <summary>
/// 構(gòu)建的步驟
/// </summary>
public abstract void BuidPart1();
public abstract void BuidPart2();
public abstract void BuidPart3();
/// <summary>
/// 構(gòu)建完成后的
/// </summary>
/// <returns></returns>
public abstract Product GetResult();
}
/// <summary>
/// 具體的建造者
/// </summary>
public class ConcreteBuilder : Builder
{
Product product;
public ConcreteBuilder()
{
product = new Product();
}
/// <summary>
/// 具體實(shí)現(xiàn)構(gòu)建產(chǎn)品的步驟
/// </summary>
public override void BuidPart1()
{
product.AddPart("步驟1");
}
public override void BuidPart2()
{
product.AddPart("步驟2");
}
public override void BuidPart3()
{
product.AddPart("步驟3");
}
/// <summary>
/// 返回構(gòu)建完成的產(chǎn)品
/// </summary>
/// <returns></returns>
public override Product GetResult()
{
return product;
}
}
/// <summary>
/// 產(chǎn)品
/// </summary>
public class Product
{
public List<string> parts;
public Product()
{
this.parts = new List<string>();
}
/// <summary>
/// 安裝零件
/// </summary>
/// <param name="part"></param>
public void AddPart(string part)
{
this.parts.Add(part);
}
/// <summary>
/// 展示產(chǎn)品
/// </summary>
public void Show()
{
this.parts.ForEach(p => Console.WriteLine(p));
}
}
/// <summary>
/// 指揮者 指揮某個(gè)建造者按照一定的順序組裝產(chǎn)品
/// </summary>
public class Director
{
Builder builder;
/// <summary>
/// 和 builder是 聚合關(guān)系,builder是觀察者的一個(gè)組成部分
/// </summary>
/// <param name="builder"></param>
public Director(Builder builder)
{
this.builder = builder;
}
/// <summary>
/// 指揮者開(kāi)始建造
/// </summary>
public void Consttruct()
{
//定義建造者的建造順序
builder.BuidPart1();
builder.BuidPart3();
builder.BuidPart2();
}
}
} 來(lái)源:https://www./content-4-439601.html
|