讀書筆記11:建造者模式

來源:互聯網
上載者:User

 1、概念

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

2、角色

產品(Product)——根據不同建造者建造的結果;

抽象建造者(Builder)——包含詳細的建造步驟;

指揮者(Director)——安排如何建造,如何安排步驟的先後順序;

具體的建造者——根據不同的需求,實現Builder的步驟,每一步驟如何?是不同的,但是Builder中的所有步驟必須都要有。

 3、模型

各角色的實現

using System;using System.Collections.Generic;using System.Text;namespace BuilderPattern{    public class Product//產品    {        List<string> parts = new List<string>();        public void Add(string part)        {            parts.Add(part);        }        public void ShowProductStep()        {            Console.WriteLine(@"開始建立產品:");            foreach (string part in parts)            {                Console.WriteLine(part);            }        }    }     public abstract class Builder//抽象建造者    {         public abstract void BuilderStep1();         public abstract void BuilderStep2();         public abstract void BuilderStep3();        // ... 根據不同的需求,該產品生產時所需的所有步驟。         public abstract Product GetProduct();    }      public class ProductBuilder1 : Builder//具體建造者1    {        private Product product = new Product();        public override void BuilderStep1()        {            product.Add("第一步 -- ");        }        public override void BuilderStep2()        {            product.Add("第二步 -- ");        }        public override void BuilderStep3()        {            product.Add("第三步");        }         public override Product GetProduct()        {            return product;        }    }    public class ProductBuilder2 : Builder//具體建造者2,具體建造者的具體步驟是不同的,但是有哪些步驟,這是統一的。    {        private Product product = new Product();        public override void BuilderStep1()        {            product.Add("第1步 -- ");        }         public override void BuilderStep2()        {            product.Add("第2步 -- ");        }        public override void BuilderStep3()        {            product.Add("第3步");        }        public override Product GetProduct()       {            return product;        }    }    public class Derector//指揮者    {        public void Construct(Builder builder)        {            builder.BuilderStep1();            builder.BuilderStep2();            builder.BuilderStep3();        }    }}

用戶端調用

using System;using System.Collections.Generic;using System.Text; namespace BuilderPattern{    class Program    {        static void Main(string[] args)        {            Derector derector = new Derector();            Builder builder1 = new ProductBuilder1();            Builder builder2 = new ProductBuilder2();             //建造產品1            derector.Construct(builder1);            Product product1 = builder1.GetProduct();            product1.ShowProductStep();            //建造產品2            derector.Construct(builder2);            Product product2 = builder2.GetProduct();            product2.ShowProductStep();            Console.ReadKey();        }    }}

結果

 

建造者模式強調的是步驟,就是得到的結果必須保證產生這個結果的流程都是統一的,而且也是的演算法和表示分離,這一點類似於策略模式,不同的演算法來實現這個策略。但是建造者模式更強調的是步驟。同時從指揮者這部分看又有些類似於面板模式,定義一個高層介面使子系統更加容易使用。但是建造者模式中,這部分的特點是指揮者決定步驟的順序,它指揮如何建造,而且經過它指揮的產生的結果在流程上是一樣的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.