日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Builder建造者模式

 印度阿三17 2019-09-04

目標(biāo):將一個(gè)復(fù)雜對(duì)象的構(gòu)建與表示分離,使同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。
使用場(chǎng)景:典型的KFC兒童餐包括一個(gè)主食,一個(gè)輔食,一杯飲料和一個(gè)玩具(例如漢堡、炸雞、可樂(lè)和玩具車)。這些在不同的兒童餐中可以是不同的,但是組合成兒童餐的過(guò)程是相同的。
優(yōu)點(diǎn):

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

  • 具體的建造者類之間是相互獨(dú)立的,對(duì)系統(tǒng)的擴(kuò)展非常有利。

  • 由于具體的建造過(guò)程的獨(dú)立的,因此可以對(duì)建造過(guò)程逐步細(xì)化,而不對(duì)其他模塊產(chǎn)生影響。

實(shí)現(xiàn):

  • Builder:抽象建造者。他聲明為創(chuàng)建一個(gè)Product對(duì)象的各個(gè)部件指定的抽象接口。

  • ConcreateBuilder:具體建造者。實(shí)現(xiàn)抽象接口,構(gòu)建和裝配各個(gè)部件。

  • Director:指揮者。構(gòu)建一個(gè)使用Builder接口的對(duì)象。它主要是用于創(chuàng)建一個(gè)復(fù)雜的對(duì)象,它主要有兩個(gè)作用,一是:隔離了客戶與對(duì)象的生產(chǎn)過(guò)程,二是:負(fù)責(zé)控制產(chǎn)品對(duì)象的生產(chǎn)過(guò)程。

  • Product:產(chǎn)品角色。一個(gè)具體的產(chǎn)品對(duì)象。
    image.png

public class BuilderTest
    {
        /***
        * 抽象的建造者只關(guān)心對(duì)象有哪些步驟,
        * 具體的建造者只關(guān)心如何實(shí)現(xiàn)每一個(gè)具體的步驟,
        * 指揮者只關(guān)心構(gòu)建的順序,
        * 三方各司其職,很好的隔離了構(gòu)建對(duì)象的步驟和順序,
        * 一但指揮者和建造者確定了,開(kāi)發(fā)者只需要關(guān)心如何實(shí)現(xiàn)和更新具體步驟就行了,
        */
        public static void Test()
        {
            Builder builder1 = new ConcreteBuilder();
            Director director = new Director(builder1);
            director.Consttruct();
            var product = builder1.GetResult();
            product.Show();
        }


        /// <summary>
        /// 抽象的建造者,定義了建造者的執(zhí)行步驟
        /// </summary>
        public abstract class Builder
        {
            /// <summary>
            /// 構(gòu)建的步驟
            /// </summary>
            public abstract void BuidPart1();
            public abstract void BuidPart2();
            public abstract void BuidPart3();

            /// <summary>
            /// 構(gòu)建完成后的
            /// </summary>
            /// <returns></returns>
            public abstract Product GetResult();
        }
        /// <summary>
        /// 具體的建造者
        /// </summary>
        public class ConcreteBuilder : Builder
        {
            Product product;

            public ConcreteBuilder()
            {
                product = new Product();
            }
            /// <summary>
            /// 具體實(shí)現(xiàn)構(gòu)建產(chǎn)品的步驟
            /// </summary>
            public override void BuidPart1()
            {
                product.AddPart("步驟1");
            }

            public override void BuidPart2()
            {
                product.AddPart("步驟2");
            }

            public override void BuidPart3()
            {
                product.AddPart("步驟3");
            }

            /// <summary>
            /// 返回構(gòu)建完成的產(chǎn)品
            /// </summary>
            /// <returns></returns>
            public override Product GetResult()
            {
                return product;
            }
        }

        /// <summary>
        /// 產(chǎn)品
        /// </summary>
        public class Product
        {
            public List<string> parts;

            public Product()
            {
                this.parts = new List<string>();
            }

            /// <summary>
            /// 安裝零件
            /// </summary>
            /// <param name="part"></param>
            public void AddPart(string part)
            {
                this.parts.Add(part);
            }

            /// <summary>
            /// 展示產(chǎn)品
            /// </summary>
            public void Show()
            {
                this.parts.ForEach(p => Console.WriteLine(p));
            }
        }



        /// <summary>
        /// 指揮者 指揮某個(gè)建造者按照一定的順序組裝產(chǎn)品
        /// </summary>
        public class Director
        {
            Builder builder;

            /// <summary>
            /// 和 builder是 聚合關(guān)系,builder是觀察者的一個(gè)組成部分
            /// </summary>
            /// <param name="builder"></param>
            public Director(Builder builder)
            {
                this.builder = builder;
            }

            /// <summary>
            /// 指揮者開(kāi)始建造
            /// </summary>
            public void Consttruct()
            {
                //定義建造者的建造順序
                builder.BuidPart1();
                builder.BuidPart3();
                builder.BuidPart2();
            }
        }


       
    }
來(lái)源:https://www./content-4-439601.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多