前言

            在本篇文章中,我們重點(diǎn)介紹建造者模式(Builder Pattern),
          建造者模式顧名思義,與建造創(chuàng)建相關(guān)。事實(shí)也是如此建造者模式也是創(chuàng)建型中的一種。在我們平常生活中會有比較復(fù)雜的東西的組成過程。比如電腦組成、手機(jī)組成、電視組成、等等。就拿電腦組成來說。可以由主板、Cpu、顯卡等等組成。但是組成的算法步驟是一樣的。只是不同的東西組裝起來結(jié)果不一樣而已。

          建造者模式介紹

          一、來由


            在軟件編程的過程我們是否也會遇到類似電腦組裝這類的問題呢?當(dāng)然是會的。組裝一個(gè)電腦我們就一次,那豈不是要累死了。類似于這種組裝算法固定但是各個(gè)部分又不穩(wěn)定經(jīng)常變化的情況。并且對象組裝較為復(fù)雜。為了面對解決這種情況。所以有建造者模式。建造者模式到底是如何解決問題的呢?我們一起看看吧。

          二、意圖

            將一個(gè)復(fù)雜對象的構(gòu)建與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。????

          三、案例圖 ?

          ?

          四、建造者模式代碼示例

            在建造者模式中一般包含如下成分:

          抽象建造者:抽象建造者為創(chuàng)建復(fù)雜產(chǎn)品對象的各個(gè)部分指定抽象創(chuàng)建接口

          具體建造者:繼承抽象建造者,實(shí)現(xiàn)抽象創(chuàng)建接口。指定創(chuàng)建的類型。創(chuàng)建各個(gè)具體的部分。

          產(chǎn)品角色:復(fù)雜產(chǎn)品對象,將各個(gè)部分組成產(chǎn)品的接口

          指揮者:調(diào)用各個(gè)部分,按固定的算法創(chuàng)建。不涉及到具體產(chǎn)品類的信息。僅負(fù)責(zé)各個(gè)部分完整的創(chuàng)建

          ?

          就組裝電腦來說,我們一起看看建造者模式如何實(shí)現(xiàn)這一復(fù)雜對象的創(chuàng)建設(shè)計(jì)。
          namespace Builder_Pattern { public class BuilderPattern { } #region
          產(chǎn)品角色——電腦的組成 ============public class Computer { private string Type = null;
          public Computer(string type) { this.Type = type; } private List<string>
          computer =new List<string>(); public void Add(string part) {
          computer.Add(part); }public void Show() { Console.WriteLine("電腦組裝正式開始:");
          foreach (var item in computer) { Console.WriteLine("配件——" + item + "已裝好"); }
          Console.WriteLine(Type+ "電腦組裝完成了"); } } #endregion #region
          抽象創(chuàng)建者——電腦中的各個(gè)部分的抽象接口============public abstract class Builder { /// <summary>
          /// Cpu抽象創(chuàng)建 /// </summary> public abstract void CreateCpu(); /// <summary> ///
          主板抽象創(chuàng)建/// </summary> public abstract void CreateMotherboard(); /// <summary> ///
          顯卡抽象創(chuàng)建/// </summary> public abstract void CreateGraphicsCard(); /// <summary>
          /// 獲取組裝好的電腦 /// </summary> /// <returns></returns> public abstract Computer
          GetComputer(); }#endregion #region 具體產(chǎn)品創(chuàng)建者——聯(lián)想電腦各個(gè)部分創(chuàng)建接口========= public class
          LenovoBuilder : Builder { Computer lenovo= new Computer("聯(lián)想"); public override
          void CreateCpu() { lenovo.Add("聯(lián)想CPU"); } public override void
          CreateMotherboard() { lenovo.Add("聯(lián)想主板"); } public override void
          CreateGraphicsCard() { lenovo.Add("聯(lián)想顯卡"); } public override Computer
          GetComputer() {return lenovo; } } #endregion #region
          具體產(chǎn)品創(chuàng)建者——惠普電腦各個(gè)部分創(chuàng)建接口=========public class HPBuilder : Builder { Computer hp =
          new Computer("惠普"); public override void CreateCpu() { hp.Add("惠普CPU"); } public
          override void CreateMotherboard() { hp.Add("惠普主板"); } public override void
          CreateGraphicsCard() { hp.Add("惠普顯卡"); } public override Computer GetComputer()
          {return hp; } } #endregion #region 指揮者——固定的組裝算法=================== /// <summary>
          /// 指揮者,其中的Construct是組裝的較為固定算法 /// </summary> public class Commander { public
          void Construct(Builder builder) { builder.CreateMotherboard();
          builder.CreateCpu(); builder.CreateGraphicsCard(); } }#endregion } class
          Program {static void Main(string[] args) { //實(shí)例化指揮者 Commander commander = new
          Commander();//指定具體產(chǎn)品 Builder builder = new LenovoBuilder(); //組裝構(gòu)建產(chǎn)品
          commander.Construct(builder);//構(gòu)建完成展示產(chǎn)品 Computer computer =
          builder.GetComputer(); computer.Show();//指定具體產(chǎn)品 builder = new HPBuilder(); //
          組裝構(gòu)建產(chǎn)品 commander.Construct(builder); //構(gòu)建完成展示產(chǎn)品 computer =
          builder.GetComputer(); computer.Show(); Console.ReadLine(); } }
          ?

          使用場景及優(yōu)缺點(diǎn)


            在建造者模式中,將一個(gè)復(fù)雜對象的組成與組件的創(chuàng)建分離開。專門的具體建造者來負(fù)責(zé)組件的創(chuàng)建、然后由指揮者來規(guī)定固定組成、最后完成組裝。這一個(gè)過程下來。把復(fù)雜對象的創(chuàng)建拆分成多個(gè)步驟。而其組件也是經(jīng)常變化的。這樣一來組件的變化僅需修改增加組件的創(chuàng)建即可。不影響其他的擴(kuò)展。這里由于建造者模式最終創(chuàng)建的產(chǎn)品差異較大,所以并沒有抽象一個(gè)產(chǎn)品類。前面一章中講的抽象工廠模式中解決的是”一系列產(chǎn)品對象”的問題。而本章中建造者模式解決的是”產(chǎn)品部分”的問題。抽象工廠模式關(guān)心的是整體,注重產(chǎn)品的創(chuàng)建,不關(guān)心細(xì)節(jié)的組成。而建造者模式關(guān)心的是細(xì)節(jié),注重產(chǎn)品的創(chuàng)建的同時(shí)也關(guān)系產(chǎn)品組成細(xì)節(jié)的問題。

          一、使用場景

          1、當(dāng)創(chuàng)建一個(gè)復(fù)雜對象且組成的算法獨(dú)立與其組成部分的時(shí)候。

          2、?多個(gè)部件或配件可以裝配到一個(gè)對象但產(chǎn)生的對象不同時(shí)。

          3、創(chuàng)建一些復(fù)雜的對象時(shí),這些對象的內(nèi)部組成構(gòu)件間的建造順序是穩(wěn)定的,但是對象的內(nèi)部組成構(gòu)件面臨著復(fù)雜的變化。

          二、優(yōu)點(diǎn)

          1、使用者客戶端不必關(guān)心產(chǎn)品的組成及細(xì)節(jié)部分。

          2、具體建造者與其他類相對獨(dú)立,易于擴(kuò)展。不易對其他模塊造成影響

          3、便于控制細(xì)節(jié)

          三、缺點(diǎn)

          1、產(chǎn)品必須有共同點(diǎn),使用范圍限制

          2、如果內(nèi)部變化較為復(fù)雜,會有較多的具體建造者類

          總結(jié)


            到這里介紹完了建造者模式,建造者模式與工廠模式相比,建造者模式更像生產(chǎn)的一個(gè)復(fù)合產(chǎn)品,并且復(fù)雜的部件不同所構(gòu)成的不同,而工廠模式僅是產(chǎn)品。同時(shí)建造者模式關(guān)注復(fù)雜產(chǎn)品細(xì)節(jié)的創(chuàng)建。但是工廠模式僅關(guān)心產(chǎn)品的創(chuàng)建,不在乎其細(xì)節(jié)的創(chuàng)建。

              做自己生命的主角,而不是別人生命中的看客。

          ?

            C#設(shè)計(jì)模式系列目錄 <https://www.cnblogs.com/hulizhong/p/11394686.html>

          歡迎大家掃描下方二維碼,和我一起踏上設(shè)計(jì)模式的闖關(guān)之路吧!

            

          ?

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                国产精品久久久D88.XYZ | 奇米影视日本伊人 | 黄色视频在线观看国产 | 天堂AV电影 | 欧美一级aaa |