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

0.C#設計模式--簡單工廠模式

1.C#設計模式--工廠方法模式

2.C#設計模式--抽象工廠模式

3.C#設計模式--單例模式

設計模式:

建造者模式(Builder Pattern)

簡單介紹:

建造者模式參與者:

  • Builder:爲創建一個Product對象的各個部件指定抽象接口;
  •  ConcreteBuilder

    ° 實現Builder的接口以構造和裝配該產品的各個部件

    ° 定義並明確它所創建的表示

    ° 提供一個檢索Product的接口

  •  Director:構造一個使用Builder接口的對象;
  • Product

    ° 表示被構造的複雜對象。ConcreteBuilder創建該產品的內部表示並定義它的裝配過程

    ° 包含定義組成部件的類,包括將這些部件裝配成最終產品的接口

  在建造者模式中,Director規定了創建一個對象所需要的步驟和次序,Builder則提供了一些列完成這些步驟的方法,ConcreteBuilder給出了這些方法的具體實現,是對象的直接創建者。

建造者模式類圖:

 建造者模式c#代碼舉例:

 Product類 產品類

public class Product
    {
        private List<string> _parts = new List<string>();

        public void Add(string part)
        {
            _parts.Add(part);
        }

        public void Show()
        {
            Console.WriteLine("Product Parts");
            foreach (string part in _parts)
            {
                Console.WriteLine(part);
            }
        }
    }

Builder類 抽象接口類

/// <summary>
    /// 爲創建一個Product對象的各個部件指定抽象接口
    /// </summary>
    public abstract class Builder
    {
        public abstract void BuildPart();
        public abstract Product GetResult();
    }

ConcreteBuilder類 具體創建者類

    public class ConcreteBuilder : Builder
    {
        private Product _product = new Product();

        public override void BuildPart()
        {
            _product.Add("Part");
        }

        public override Product GetResult()
        {
            return _product;
        }
    }

Director類 提供使用Builder類的接口

public class Director
    {
        /// <summary>
        /// 構造一個使用Builder接口的對象
        /// </summary>
        public void Construct(Builder builder)
        {
            builder.BuildPart();
        }
    }

測試代碼:

    class Test
    {
        static void Main(string[] args)
        {
            // Create director and builders
            Director director = new Director();

            Builder b1 = new ConcreteBuilder();

            // Construct two products
            director.Construct(b1);
            Product p1 = b1.GetResult();
            p1.Show();

            Console.Read();
        }
    }

運行結果:

源代碼工程文件下載


實例舉例,手機生產舉例  

  • Builder-->MobilePhoneBuilder
  •  ConcreteBuilder-->XiaoMIBuilder和AppleBuilder
  •  Director-->Factory
  • Product -->MobilePhone

分別有:手機品牌(brand),處理器(cup),運行內存(ram),外置內存(rom)信息

MobilePhone類產品類 

public class MobilePhone
    {
        private string _brand;
        private Dictionary<string, string> _Info = new Dictionary<string, string>();

        public string this[string key]
        {
            get { return _Info[key]; }
            set { _Info[key] = value; }
        }
        public MobilePhone(string brand)
        {
            this._brand = brand;
        }
        public void Show()
        {
            Console.WriteLine("\n-----Info--------");
            Console.WriteLine(" BRAND: {0}", _brand);
            Console.WriteLine(" CPU  : {0}", _Info["cpu"]);
            Console.WriteLine(" RAM  : {0}", _Info["ram"]);
            Console.WriteLine(" ROM  : {0}", _Info["rom"]);
        }
    }

MobilePhoneBuilder類 創建者抽象類

 public abstract class MobilePhoneBuilder
    {
        protected MobilePhone _mobilePhone;

       
        public MobilePhone mobilePhone
        {
            get { return _mobilePhone; }
        }

        // Abstract build methods
        public abstract void BuildCPU();
        public abstract void BuildRAM();
        public abstract void BuildROM();
        
    }

XiaoMIBuilder類 小米手機創建者類

public class XiaoMIBuilder:MobilePhoneBuilder
    {
        public XiaoMIBuilder()
        {
            _mobilePhone = new MobilePhone("小米5s");
        }
        public override void BuildCPU()
        {
            _mobilePhone["cpu"] = "驍龍821";
        }

        public override void BuildRAM()
        {
            _mobilePhone["ram"] = "4G";
        }

        public override void BuildROM()
        {
            _mobilePhone["rom"] = "32G";
        }
    }

AppleBuilder類 蘋果手機的具體創建類

public class AppleBuilder:MobilePhoneBuilder
    {
        public AppleBuilder()
        {
            _mobilePhone = new MobilePhone("iphone7s plus");
        }
        public override void BuildCPU()
        {
            _mobilePhone["cpu"] = "A10";
        }

        public override void BuildRAM()
        {
            _mobilePhone["ram"] = "2G";
        }

        public override void BuildROM()
        {
            _mobilePhone["rom"] = "128G";
        }
    }

Factory類,提供創建者的接口

    public class Factory
    {
        public void Construct(MobilePhoneBuilder mobilePhoneBuilder)
        {
            mobilePhoneBuilder.BuildCPU();
            mobilePhoneBuilder.BuildRAM();
            mobilePhoneBuilder.BuildROM();
        }
    }

測試代碼:

    class Test
    {
        static void Main(string[] args)
        {
            MobilePhoneBuilder builder;
            Factory factory = new Factory();

            builder = new XiaoMIBuilder();
            factory.Construct(builder);
            builder.mobilePhone.Show();

        
            builder = new AppleBuilder();
            factory.Construct(builder);
            builder.mobilePhone.Show();

            Console.Read();
        }
    }

運行結果:

 

源代碼工程文件下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章