參考:https://www.cnblogs.com/frank0812/p/11241935.html
1.什麼是建造者
2.建造者有什麼優勢
3.建造者有什麼劣勢
4.怎麼用建造者模式
建造者定義:在軟件開發中,有時我們要創建一個複雜的對象,這個對象由幾個子部件按一定的步驟組合而成,這時候我們就可以使用建造者模式了。說到建造者我們首先想到的是蓋房子,蓋房子簡單的說有三個步驟:打地基,砌磚,粉刷。我們就以蓋房子爲例解釋建造者模式的用法。(自我理解:使用時有時序的,並且時序比較穩定,並不是有無數種的,而是有限的幾種)
建造者模式有三個角色:建造者,具體的建造者,監工。理清這三個角色的作用我們就可以愉快的使用建造者模式了。
建造者:一般爲抽象類或接口,定義了建造者的功能。如蓋房子例子的建造者有打地基,砌磚和粉刷的功能。
具體的建造者:實現了建造者的抽象方法(或接口)。不同的具體建造者生產的組件不同,如一個技術好的建造者打地基深,砌磚整齊,粉刷光滑,而技術差的建造者打地基淺,砌磚錯亂,粉刷粗糙。
監工:制定建造的算法。建造者可以打地基,砌磚,粉刷,但是不知道先粉刷還是先打地基,監工就是給建造者制定蓋房子步驟的。
代碼實現如下,
using System;
namespace BuilderModel
{
/// <summary>
/// 建造房子
/// </summary>
public abstract class Builder
{
public abstract void builderFoundation();//第一步 先建造地基
public abstract void builderHorse();//第二步 再建造房子
public abstract void builderPaint();//第三步 粉刷房子
public abstract void getHouse();//第四步獲取房子
}
public class GoodBuilder: Builder
{
public override void builderFoundation()
{
Console.WriteLine("建造一個好地基");
}
public override void builderHorse()
{
Console.WriteLine("建造一個好房子");
}
public override void builderPaint()
{
Console.WriteLine("好好粉刷房子");
}
public override void getHouse()
{
Console.WriteLine("獲得一個好房子");
}
}
public class BadBuilder : Builder
{
public override void builderFoundation()
{
Console.WriteLine("隨便建造一個地基");
}
public override void builderHorse()
{
Console.WriteLine("隨便造一個房子");
}
public override void builderPaint()
{
Console.WriteLine("隨便粉刷一下");
}
public override void getHouse()
{
Console.WriteLine("獲得一個質量較差的房子");
}
}
public class Adverice
{
private Builder builder = null;
public Adverice(Builder builder)
{
this.builder = builder;
}
public void GetBuilder()
{
builder.builderFoundation();
builder.builderHorse();
builder.builderPaint();
}
}
class Program
{
static void Main(string[] args)
{
Builder goodBuilder = new GoodBuilder();
Adverice adverice = new Adverice(goodBuilder);//將創建過程放在監工類中
adverice.GetBuilder();
goodBuilder.getHouse();
Builder badBuilder = new BadBuilder();
Adverice adverice1 = new Adverice(badBuilder);
adverice1.GetBuilder();
badBuilder.getHouse();
}
}
}
總結:
1.適用於流水線比較複雜創建方式 過程,相互獨立,易於擴展
2.當創建時序很多時,不適用