国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【23種設計模式】建造者模式(四)

這篇具有很好參考價值的文章主要介紹了【23種設計模式】建造者模式(四)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

在軟件系統(tǒng)中,有時候面臨著“一個復雜對象”的創(chuàng)建工作,其通常由各個部分的子對象用一定的算法構成;由于需求的變化,這個復雜對象的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的算法卻相對穩(wěn)定。如何應對這種變化?如何提供一種“封裝機制”來隔離出“復雜對象的各個部分”的變化,從而保持系統(tǒng)中的“穩(wěn)定構建算法”不隨著需求改變而改變?那就是今天分享的建造者模式,又叫生成器模式,英文名稱是Builder Pattern。

建造者模式定義

在現實生活中,我們經常會遇到一些構成比較復雜的物品,比如:汽車、電腦和手機等等。它們是一個復雜的物品,主要是由各種零部件組裝而成的,他們的組裝過程是固定的。就拿汽車來說,組裝流水線是固定的,不變的,需要把底盤、車輪、車門、車燈、發(fā)動機引擎、車燈和排氣筒等等組裝在一起。但是由于需求的變化,這個汽車復雜對象針對不同的品牌,各個部分經常面臨著劇烈的變化,但是將它們組合在一起的算法卻相對穩(wěn)定。建造者設計模式定義就是將一個復雜對象的構建與其表示相分離,使得同樣的構建過程可以創(chuàng)建不同的表示。

建造者模式組成

(1)抽象建造者角色(Builder):為創(chuàng)建一個Product對象的各個部件指定抽象接口,以規(guī)范產品對象的各個組成成分的建造。一般而言,此角色規(guī)定要實現復雜對象的哪些部分的創(chuàng)建,并不涉及具體的對象部件的創(chuàng)建。

(2)具體建造者(ConcreteBuilder)

  • 實現Builder的接口以構造和裝配該產品的各個部件。即實現抽象建造者角色Builder的方法。
  • 定義并明確它所創(chuàng)建的表示,即針對不同的商業(yè)邏輯,具體化復雜對象的各部分的創(chuàng)建。
  • 提供一個檢索產品的接口。
  • 構造一個使用Builder接口的對象即在指導者的調用下創(chuàng)建產品實例。

(3)指導者(Director):調用具體建造者角色以創(chuàng)建產品對象的各個部分。指導者并沒有涉及具體產品類的信息,真正擁有具體產品的信息是具體建造者對象。它只負責保證對象各部分完整創(chuàng)建或按某種順序創(chuàng)建。

(4)產品角色(Product):建造中的復雜對象,對應具體的產品。它要包含那些定義組件的類,包括將這些組件裝配成產品的接口。

【23種設計模式】建造者模式(四)

建造者模式代碼實現

【23種設計模式】建造者模式(四)

抽象建造者
 /// <summary>
    /// 抽象建造者,它定義了要創(chuàng)建什么部件和最后創(chuàng)建的結果,但是不是組裝的的類型
    /// </summary>
    public abstract class Builder
    {
        /// <summary>
        /// 創(chuàng)建車門
        /// </summary>
        public abstract void BuildCarDoor();
        /// <summary>
        /// 創(chuàng)建車輪
        /// </summary>
        public abstract void BuildCarWheel();
        /// <summary>
        /// 創(chuàng)建車引擎
        /// </summary>
        public abstract void BuildCarEngine();


        /*
         * 當然還有部件:
         * 大燈
         * 地盤
         * ....
         * ....
         */

        /// <summary>
        /// 獲得組裝完成的汽車
        /// </summary>
        /// <returns></returns>
        public abstract Car GetCar();
    }
具體建造者

別克:

 /// <summary>
    /// 具體建造者,具體的車型的建造者,例如:別克
    /// </summary>
    public sealed class BuickBuilder : Builder
    {
        Car buickCar = new Car("別克");
        public override void BuildCarDoor()
        {
            buickCar.Add("Buick's Door");
        }

        public override void BuildCarWheel()
        {
            buickCar.Add("Buick's Wheel");
        }

        public override void BuildCarEngine()
        {
            buickCar.Add("Buick's Engine");
        }

        public override Car GetCar()
        {
            return buickCar;
        }
    }

奧迪:

/// <summary>
    /// 具體建造者,具體的車型的建造者,例如:奧迪
    /// </summary>
    public sealed class AoDiBuilder : Builder
    {
        Car aoDiCar = new Car("奧迪");
        public override void BuildCarDoor()
        {
            aoDiCar.Add("Aodi's Door");
        }

        public override void BuildCarWheel()
        {
            aoDiCar.Add("Aodi's Wheel");
        }

        public override void BuildCarEngine()
        {
            aoDiCar.Add("Aodi's Engine");
        }

        public override Car GetCar()
        {
            return aoDiCar;
        }
    }
汽車固定組裝流程定義
 /// <summary>
    /// 汽車類
    /// </summary>
    public sealed class Car
    {
        // 汽車部件集合
        private IList<string> parts = new List<string>();
        //汽車品牌名
        private string _brandName;
        /// <summary>
        /// 構造函數
        /// </summary>
        /// <param name="brandName"></param>
        public Car(string brandName)
        {
            _brandName = brandName;
        }
        /// <summary>
        /// 把單個部件添加到汽車部件集合中
        /// </summary>
        /// <param name="part"></param>
        public void Add(string part)
        {
            parts.Add(part);
        }
        /// <summary>
        /// 汽車組裝流程
        /// </summary>
        public void Assembly()
        {
            Console.WriteLine($"{_brandName}汽車開始在組裝.......");
            foreach (string part in parts)
            {
                Console.WriteLine("組件" + part + "已裝好...");
            }

            Console.WriteLine($"{_brandName}汽車組裝完畢.........");
        }
    }
指導者

這里才是調用組裝的,Construct方法里面的實現就是創(chuàng)建復雜對象固定算法的實現,根據具體需求變化,控制組裝的流程順序,該算法是固定的,或者說是相對穩(wěn)定的。

 /// <summary>
    /// 自動化工廠操控臺,也就是建造者模式中的指揮者
    /// </summary>
    public class Director
    {
        /// <summary>
        /// 自動化算法指導組裝汽車
        /// </summary>
        /// <param name="builder"></param>
        public void Construct(Builder builder)
        {
            builder.BuildCarDoor();
            builder.BuildCarWheel();
            builder.BuildCarEngine();
            /*
             * 指導其他流程
             */
        }
    }
調用
  /// <summary>
        /// 測試方法
        /// </summary>
        public void RunTest()
        {
            Director director = new Director();

            //組裝別克
            Builder buickCarBuilder = new BuickBuilder();
            director.Construct(buickCarBuilder);
            Car buickCar = buickCarBuilder.GetCar();
            buickCar.Assembly();

            Console.WriteLine("\r\n*****************************\r\n");

            //組裝奧迪
            Builder aoDiCarBuilder = new AoDiBuilder();
            director.Construct(aoDiCarBuilder);
            Car aoDiCar = aoDiCarBuilder.GetCar();
            aoDiCar.Assembly();
        }

【23種設計模式】建造者模式(四)

建造者模式優(yōu)缺點

優(yōu)點:

  • 使用建造者模式可以使客戶端不必知道產品內部組成的細節(jié)。

  • 具體的建造者類之間是相互獨立的,容易擴展。

  • 由于具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任何影響。文章來源地址http://www.zghlxwxcb.cn/news/detail-679649.html

缺點:

  • 產生多余的Build對象以及Director類。

到了這里,關于【23種設計模式】建造者模式(四)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【設計模式——學習筆記】23種設計模式——建造者模式Builder(原理講解+應用場景介紹+案例介紹+Java代碼實現)

    【設計模式——學習筆記】23種設計模式——建造者模式Builder(原理講解+應用場景介紹+案例介紹+Java代碼實現)

    建造者模式又叫生成器模式,是一種對象構建模式。它可以將復雜對象的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同屬性的對象 建造者模式是一步一步創(chuàng)建一個復雜的對象,它允許用戶只通過指定復雜對象的類型和內容就可以構建它們,不

    2024年02月15日
    瀏覽(26)
  • 【軟件設計模式——單例模式和建造者模式】

    簡述 單例模式是一種創(chuàng)建型設計模式,它保證一個類只有一個實例,并提供全局訪問點。這意味著在整個應用程序中,只能存在一個該類的對象實例。 主要特點 一個類只有一個實例對象。 提供一個全局訪問點,使其他對象可以通過該訪問點訪問到唯一的實例。 優(yōu)點 避免了

    2024年02月12日
    瀏覽(18)
  • 軟件設計模式系列之五——建造者模式

    軟件設計模式系列之五——建造者模式

    建造者模式是一種對象創(chuàng)建型設計模式,它將一個復雜對象的構建過程與其表示分離。這意味著你可以使用相同的構建過程來創(chuàng)建不同類型的對象,而不必關心每個對象的內部細節(jié)。這種模式適用于構建具有復雜配置的對象,例如具有多個可選組件的汽車。 建造者模式的結構

    2024年02月08日
    瀏覽(19)
  • 【軟件架構設計】支持大規(guī)模系統(tǒng)的設計模式和原則

    【軟件架構設計】支持大規(guī)模系統(tǒng)的設計模式和原則

    今天,即使是小型初創(chuàng)公司也可能不得不處理數 TB 的數據或構建支持每分鐘(甚至一秒鐘?。凳f個事件的服務。所謂“規(guī)?!?,通常是指系統(tǒng)應在短時間內處理的大量請求/數據/事件。 嘗試以幼稚的方式實現需要處理大規(guī)模的服務,在最壞的情況下注定要失敗,或者在最

    2024年02月13日
    瀏覽(22)
  • 設計模式之開閉原則:如何優(yōu)雅地擴展軟件系統(tǒng)

    設計模式之開閉原則:如何優(yōu)雅地擴展軟件系統(tǒng)

    在現代軟件開發(fā)中,設計模式是解決常見問題的最佳實踐。其中,開閉原則作為面向對象設計的六大基本原則之一,為軟件系統(tǒng)的可維護性和擴展性提供了強大的支持。本文將深入探討開閉原則的核心理念,以及如何在實際項目中運用這一原則,以便更好地設計軟件系統(tǒng)。

    2024年01月18日
    瀏覽(23)
  • 軟考高級系統(tǒng)架構設計師系列論文八十三:論軟件設計模式的應用

    軟考高級系統(tǒng)架構設計師系列之:面向構件的軟件設計,構件平臺與典型架構

    2024年02月11日
    瀏覽(165)
  • Java設計模式-前言

    Java設計模式-前言

    ?館長準備了很多學習資料,其中包含 java方面,jvm調優(yōu),spring / spring boot /spring cloud ,微服務,分布式,前端,js書籍資料,視頻資料,以及各類常用軟件工具,破解工具? 等資源。請關注“IT技術館”公眾號,進行關注,館長會每天更新資源和更新技術文章等。請大家多多關

    2024年01月21日
    瀏覽(23)
  • 設計模式-建造者模式

    設計模式-建造者模式

    在前面幾篇文章中,已經講解了單例模式、工廠方法模式、抽象工廠模式,創(chuàng)建型還剩下一個比較重要的模式-建造者模式。在理解該模式之前,我還是希望重申設計模式的初衷,即 為解決一些問題而提供的優(yōu)良方案 。學習設計模式遺忘其初衷,注定無法理解其真正的深刻內

    2024年02月15日
    瀏覽(23)
  • 設計模式——建造者模式

    建造者模式(Builder Pattern)是一種創(chuàng)建型設計模式,它允許通過分步驟來構建復雜對象。該模式的核心原理是將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表現形式。 在建造者模式中,通常有以下角色: 抽象建造者(Builder): 定義了創(chuàng)建產品

    2024年01月16日
    瀏覽(20)
  • 設計模式: 建造者模式

    設計模式: 建造者模式

    建造模式通過一步一步的去構建一個復雜的對象。該模式將對象的構建細節(jié)封裝在一個獨立的建造者類中,使得客戶端代碼可以根據需要定制對象的構建過程,而不必知道具體的構建細節(jié)。 建造者模式通常包括以下幾個角色: 產品類(Product):需要對象,通常是包含多個屬

    2024年02月21日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包