php安裝grpc擴充套件的具體步驟
阿新 • • 發佈:2021-07-06
建造者模式是一種建立型設計模式(有的也稱之為生成器模式), 使你能夠分步驟建立複雜物件。 該模式允許你使用相同的建立程式碼生成不同型別和形式的物件。
建造者模式定義
建造者模式是一種建立型設計模式(有的也稱之為生成器模式), 使你能夠分步驟建立複雜物件。 該模式允許你使用相同的建立程式碼生成不同型別和形式的物件。
建造者模式結構
- 建造者/生成器(Builder):清晰的定義通用步驟,確保它們可以製造所有形式的產品。 否則你將無法進一步實施該模式。
- 具體建造者(ConcreteBuilder):每個形式的產品建立具體生成器類, 並實現其構造步驟。
- 指揮者(Director):它可以使用同一生成器物件來封裝多種構造產品的方式。
建造者模式實現
場景:蓋房子,房子都有房頂、四面牆壁、窗戶和門,可以使用不同的材料,例如,第一個建造者使用木頭和玻璃,第二個建造者使用石頭和鋼鐵。在呼叫一組步驟後,第一個建造者得到的是一棟普通房屋,第二棟得到的是一棟城堡
使用程式碼簡單實現一下:
宣告建立房屋通用步驟的介面
public interface IHouseBuilder
{
void buildWall();
void buildRoof();
void buildWindow();
void buildDoor();
void buildResult();
}
建立具體建造者,繼承介面並實現
public class House : IHouseBuilder { public void buildDoor() { Console.WriteLine("裝房門"); } public void buildResult() { Console.WriteLine("普通木屋"); } public void buildRoof() { Console.WriteLine("蓋房頂"); } public void buildWall() { Console.WriteLine("蓋牆壁"); } public void buildWindow() { Console.WriteLine("安裝窗戶"); } }
建立指揮者,用於構建和組織步驟
public class HouseDirector
{
public void Construct(IHouseBuilder houseBuilder)
{
houseBuilder.buildWall();
houseBuilder.buildWall();
houseBuilder.buildWindow();
houseBuilder.buildDoor();
}
}
客戶端呼叫
static void Main(string[] args) { HouseDirector houseDirector = new HouseDirector(); Console.WriteLine("------------------蓋一棟普通木屋------------------"); IHouseBuilder houseBuilder1 = new House(); houseDirector.Construct(houseBuilder1); houseBuilder1.buildResult(); Console.WriteLine("------------------蓋一棟城堡------------------"); IHouseBuilder houseBuilder2 = new Tower(); houseDirector.Construct(houseBuilder2); houseBuilder2.buildResult(); Console.WriteLine("Press Any Key to end!"); Console.ReadKey(); }
輸出結果
建造者模式優缺點
優點
- 可以分步建立物件, 暫緩建立步驟或遞迴執行建立步驟。
- 生成不同形式的產品時, 你可以複用相同的製造程式碼。
- 單一職責原則。 你可以將複雜構造程式碼從產品的業務邏輯中分離出來。
缺點
- 由於該模式需要新增多個類, 因此程式碼整體複雜程度會有所增加。
建造者模式使用場景
- 當你希望使用程式碼建立不同形式的產品(例如石頭或木頭房屋)時,可使用生成器模式
- 使用生成器構造組合樹或其他複雜物件。