1. 程式人生 > >C#設計模式—建造者模式

C#設計模式—建造者模式

一、建造者模式定義

    將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

    說明:建造模式是一種物件建立型模式,它將客戶端與包含多個部件的複雜物件的建立過程分離,客戶端無須知道複雜物件的內部組成部分與裝配方式,只需要知道所需建造者的型別即可。

二、建造者模式結構

    1)抽象建造者:為建立一個產品物件的各個部件指定抽象介面,該介面中一般包含兩個方法:一個是建立複雜物件的各個部分;另一個是GetResult()方法,用於返回複雜物件。

    2)具體建造者:它實現了Builder介面,實現各個部件的具體構造和裝配方法。

    3)產品:它是被構建的複雜物件,包含多個組成部件,具體建造者建立該產品的內部表示並定義產品的裝配過程。

    4)指揮者:指揮類,安排複雜物件的建造次序,指揮者與抽象建造者之間存在關聯關係。客戶端一般只需要與指揮者進行互動,在客戶端確定具體建造者的型別,並實現例項化具體建造者物件,然後通過指揮類的建構函式或Setter方法將該物件傳入指揮者類中。

三、應用例項

    遊戲軟體公司開發一款基於角色扮演的多人線上網路遊戲,玩家可以再遊戲中扮演虛擬世界中的特定角色,角色根據不同的遊戲情節和統計資料(例如:力量,魔法,技能等)具有不同的能力,角色也會隨著不斷升級而擁有更加強大的能力。

    ActorController充當指揮者;ActorBuilder抽象建造者;HeroBuilder、AngelBuilder和DevilBuilder是具體建造者;Actor為客戶端需要的複雜產品。

複雜產品:

    //遊戲中角色類,充當複雜產品物件

    classActor

    {

        privatestringtype;//角色型別

        privatestringsex;//性別

        privatestringface;//面容

        privatestringcostume;//服裝

        privatestringhairstyle;//髮型

        publicstringType

        {

            get{ return type; }

            set{ type = value

; }

        }

        publicstringSex

        {

            get{ return sex; }

            set{ sex = value; }

        }

        publicstringFace

        {

            get{ return face; }

            set{ face = value; }

        }

        publicstringCostume

        {

            get{ return costume; }

            set{ costume = value; }

        }

        publicstringHairstyle

        {

            get{ return hairstyle; }

            set{ hairstyle = value; }

        }

    }

ActorBuilder.cs抽象建造者

    //角色建造者:抽象建造者

    abstractclassActorBuilder

    {

        protectedActor actor =new Actor();

        publicabstractvoidBuildType();

        publicabstractvoidBuildSex();

        publicabstractvoidBuildFace();

        publicabstractvoidBuildCostum();

        publicabstractvoidBuildHairstyle();

        //工廠方法、返回一個完整的遊戲角色物件

        publicActor CreateActor()

        {

            returnactor;

        }

}

具體建造者:

1)英雄角色建造者

    //英雄角色建造者,為具體建造者

    classHeroBuilder:ActorBuilder

    {

        publicoverridevoidBuildType()

        {

           actor.Type = "英雄";

        }

        publicoverridevoidBuildSex()

        {

           actor.Sex = "";

        }

        publicoverridevoidBuildFace()

        {

           actor.Face = "英俊";

        }

        publicoverridevoidBuildCostume()

        {

           actor.Costume = "盔甲";

        }

        publicoverridevoidBuildHairstyle()

        {

           actor.Hairstyle = "飄逸";

        }

}

2)具體建造者:天使角色建造者

    //具體建造者:天使角色

    classAngelBuilder:ActorBuilder

    {

        publicoverridevoidBuildType()

        {

           actor.Type = "天使";

        }

        publicoverridevoidBuildSex()

        {

           actor.Sex = "";

        }

        publicoverridevoidBuildFace()

        {

           actor.Face = "漂亮";

        }

        publicoverridevoidBuildCostume()

        {

           actor.Costume = "白裙";

        }

        publicoverridevoidBuildHairstyle()

        {

           actor.Hairstyle = "披肩長髮";

        }

}

3)具體建造者:惡魔角色建造者

    //具體建造者:惡魔角色

    classDevilBuilder:ActorBuilder

    {

        publicoverridevoidBuildType()

        {

           actor.Type = "惡魔";

        }

        publicoverridevoidBuildSex()

        {

           actor.Sex = "";

        }

        publicoverridevoidBuildFace()

        {

           actor.Face = "醜陋";

        }

        publicoverridevoidBuildCostume()

        {

           actor.Costume = "黑衣";

        }

        publicoverridevoidBuildHairstyle()

        {

           actor.Hairstyle = "光頭";

        }

}

角色控制者:

    //角色控制者:指揮者

    classActorController

    {

        //逐步構建複雜產品物件

        publicActor Construct(ActorBuilder ab)

        {

            Actor actor;

           ab.BuildType();

           ab.BuildSex();

           ab.BuildFace();

           ab.BuildCostume();

           ab.BuildHairstyle();

            actor = ab.CreateActor();

            returnactor;

        }

}

配置檔案:App.config的設定(可以設定所需建立的物件)

<?xmlversion="1.0"encoding="utf-8"?>

<configuration>

    <startup>

        <supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5.2,Profile=Client"/>

    </startup>

  <appSettings>

    <addkey="builder"value="BuilderSample.AngelBuilder"/>

  </appSettings>

</configuration>

客戶端測試類:

    classProgram

    {

        staticvoidMain(string[] args)

        {

            //抽象建造者物件

            ActorBuilder ab;

            //讀取配置檔案,獲取要建立的角色的型別

            stringbuilderType = ConfigurationManager.AppSettings["builder"];

            //反射生成物件

           ab = (ActorBuilder)Assembly.Load("BuilderSample").CreateInstance(builderType);

            ActorController ac =new ActorController();

            Actor actor;

            //指揮者建立完整的建造物件

           actor = ac.Construct(ab);

            Console.WriteLine("{0}的外觀",actor.Type);

            Console.WriteLine("性別{0}",actor.Sex);

            Console.WriteLine("面容{0}",actor.Face);

            Console.WriteLine("服裝{0}",actor.Costume);

            Console.WriteLine("髮型{0}",actor.Hairstyle);

            Console.Read();

        }

    }

四、建造者的優點

    1)客戶端不必知道產品的內部結構;

    2)每一個建造者相對比較獨立,便於增加建造者物件;

    3)使用者可以控制建立過程。

五、建造者模式的確定

    1)產品具有較多的共同點,組成部分相似,如果物件之間差異較大就不適合該模式;

    2)如果產品複雜,且物件較多,則系統會變的龐大。

相關推薦

設計模式-建造模式-C++實現

建造者模式:將一個複雜物件的構建與它的表示分離,使得同樣的建立過程可以建立不同的表示。 場景: 1.當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。 2.當構造過程必須允許被建立的物件有不同的表示時。 #include <stdio.h> #in

C#設計模式-建造模式

using System; using System.Collections.Generic; namespace TestCS { class Program { static void Main(string[] args) {

C#設計模式建造模式

一、建造者模式定義     將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。     說明:建造模式是一種物件建立型模式,它將客戶端與包含多個部件的複雜物件的建立過程分離,客戶端無須知道複雜物件的內部組成部分與裝配方式,只需要知道所需建造者的型別即

C#設計模式--建造模式

設計模式: 建造者模式(Builder Pattern) 簡單介紹: 建造者模式參與者: Builder:為建立一個Product物件的各個部件指定抽象介面; ConcreteBuilder     ° 實現Builder的介面以構造和裝配該產品的各個部件  

C#設計模式-建造模式(Builder Pattern)

引言 在軟體測試中,一個專案的自動化測試包括UI自動化、API自動化、壓力自動化等,把這些不同型別的自動化測試組裝在一起變構成了一個專案的自動化測試。通過執行專案的自動化測試變能執行他的所有型別的自動化測試。當然,在生活中也有類似的,比如電腦,由CPU、磁碟、顯示卡等部分組成,一輛車由輪胎、車體、發動機等部件

設計模式-建造模式(05)

部分 目標 bstr 好的 細節 get 邏輯 str ext 定義   建造者模式(Builder Pattern)也叫做生成器模式。英文原話是:Separate the construction of a complex object from its represe

設計模式建造模式

face 組合 print rac 快餐 span system app 如何解決 建造者模式(Builder Pattern)使用多個簡單的對象一步一步構建成一個復雜的對象。 意圖:將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。 主要解決:主要

設計模式——建造模式

組成 this 步驟 ring 相同 共同點 之間 優點 基礎 什麽是建造者 建造者模式實際上是常用的設計模式。顧名思義,builder的意思是建造者或者建築工人,談到建造自然會想到樓房。樓房是千差萬別的,樓房的外形、層數、內部房間的數量、房間的裝飾等等都不一樣,但是對於

設計模式-建造模式

設計模式 建造者模式 //產品 public abstract class Food { public List<string> list = new List<string>(); public abstract void show()

設計模式】單例模式 |建造模式 |原型模式

單例模式 通常我們讓一個全域性變數使得一個物件被訪問,但它不能防止你例項化多個物件。一個最好的辦法就是,讓類自身負責八寸他的唯一例項。這個類可以保證沒有其他例項可以被建立,並且它可以提供一個訪問該例項的方法。 單例模式(Singletion):保證

設計模式-建造模式(Go語言描述)

在上一篇部落格設計模式-裝飾者模式中我們介紹瞭如何在golang中實現裝飾者模式,今天我們接著上篇部落格繼續設計模式系列文章,今天還是來看一個簡單的設計模式-建造者模式。 介紹 相信做過android的同學對建造者模式還是比較熟悉的, 一定用過開源的圖片載入框架ImageLoad

設計模式 | 建造模式及典型應用

本文目錄 建造者模式 角色 示例 建造者模式總結 建造者模式的典型

android設計模式——建造模式

Builder模式就是相比於一輛汽車有各個部件 但是不同的汽車有不同的部件 但是裝配成一輛車的方法相同 例子:比如肯德基有漢堡,雞翅,可樂,但是不同的套餐 是不同的組合 使用場景: 相同的方法,不同的執行順序產生不同的結果, 多個部件或零件,都可以裝配到一個物件中,但是產生的

設計模式---建造模式【含例項】

建造者模式(Client、Director、Builder和Product)  Builder負責Product類物件的具體過程構建,Director負責指導Build,要求Builder按照其指定的順序去完成Product的構造。最後通過Builder返回建造後的結果。 適用

設計模式 建造模式

class Bulider: def __init__(self): pass def wheel(self): pass def engine(self): pass def frame(self): pa

用心理解設計模式——建造模式 (Builder Pattern)

前置文章: 用心理解設計模式——設計模式的原則  設計模式相關程式碼已統一放至 我的 Github   一、定義   建立型模式之一。   Separate the construction of a complex object

設計模式-建造模式(Builder)

建造者模式(Builder) 定義 : 將一個複雜物件的構建與它的表示分離, 是的同樣的構建過程可以建立不同的表示 使用者只需指定需要建造的型別就可以得到它們, 建造過程及細節不需要知道 型別 : 建立型設計模式 適用場景 一個物件有非常複雜

unity設計模式-----建造模式

建造者模式(Builder Pattern): 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。     作用: 在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。 (1)使用者只需要給出指定複雜物件的型別和內容 (

大話設計模式-建造模式

建造者模式 建造者模式又稱生成器模式,將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 建造者模式主要用於建立一些複雜的物件,這些物件內部構構建間的構造順序通常是穩定的,但物件內部的構建通常面臨著複雜的變化。 建造者模式的好處就是使得建造程式碼與表示程式碼分離,由於建造者隱藏了

設計模式-建立型模式-建造模式

設計模式-建立型模式-建造者模式 建造者模式即生成器模式,將一個複雜的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 程式碼如下 // 產品類 public class Product{ public void doSomething(){ // 業務處理 }