C#設計模式:建造者模式(Builder Pattern)

來源:互聯網
上載者:User

標籤:tco   system   建立對象   prot   main   class   設計   summary   英語   

一,建造者模式(Builder Pattern)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _4.建造者模式{    //建造者模式(Builder Pattern):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建造者模式是一種對象建立型模式。    //與抽象工廠的區別是:抽象工廠是針對系列對象(如會出現各種車對象),然而建立者模式是針對一個對象的局部變化(如單個對象有不同武器等)    class Program    {        static void Main(string[] args)        {            Builder builder = new USA("黑皮膚", "美國人", "英語");            Director director = new Director(builder);            People product = director.Construct();            Console.Write("\r\n");            Builder builder1 = new USA("白皮膚", "英國人", "日語");            Director director1 = new Director(builder1);            People product1 = director1.Construct();            Console.ReadKey();        }    }    /// <summary>    /// 建立抽象類別    /// </summary>    public abstract class Builder    {        protected People people = new People();        public abstract void SetCountry();        public abstract void SetSpeak();        public abstract void SetSkinColor();        public People getResult()        {            return people;        }    }    /// <summary>    /// 被建立的對象,對象會出現局部的不同,    /// </summary>    public class People    {        public People()        {            Console.Write("我們都是人,但是");        }    }    public class USA : Builder    {        private string _country;        private string _speak;        private string _skincolor;        public USA(string skincolor, string country, string speak)        {            this._country = country;            this._skincolor = skincolor;            this._speak = speak;        }        public override void SetSkinColor()        {            Console.Write(_skincolor + "的");        }        public override void SetCountry()        {            Console.Write(_country);        }        public override void SetSpeak()        {            Console.Write("講" + _speak);        }    }    public class UK : Builder    {        private string _country;        private string _speak;        private string _skincolor;        public UK(string skincolor, string country, string speak)        {            this._country = country;            this._skincolor = skincolor;            this._speak = speak;        }        public override void SetSkinColor()        {            Console.Write(_skincolor + "的");        }        public override void SetCountry()        {            Console.Write(_country);        }        public override void SetSpeak()        {            Console.Write("講" + _speak);        }    }    /// <summary>    /// 執行者,建立對象    /// </summary>    public class Director    {        private Builder builder;        public Director(Builder bu)        {            this.builder = bu;        }        public People Construct()        {            builder.SetSkinColor();            builder.SetCountry();            builder.SetSpeak();            return builder.getResult();        }    }}

二,根據上面代碼,我們會感覺和抽象工廠很像,他們兩個是什麼呢?

1》建造者模式將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建造者模式是一種複雜物件建立型模式。

2》抽象工廠則是針對系列對象,建造者模式是一種複雜物件

三,相對抽象工廠和建造者的一種複雜物件怎麼理解呢?

我們就以People為對象來理解:

1》在建造者模式中,我們可以通過抽象的類建立出美國人和英國人對象,而這對象則是有自己獨立的東西等,如黑皮膚的美國人講英語和白皮膚的英國人講日語,這裡的人理解成為同一種複雜的對象

2》而在重抽象工廠中,在英國人工廠中,只能實現白皮膚的英國人講日語。而不會出現實現了黑皮膚的美國人講英語(這個屬於美國人的工廠實現的),所以對於抽象工廠,在此時我們將英國人和美國人理解為兩個不同的對象,所以抽象工廠是針對系列對象

C#設計模式:建造者模式(Builder Pattern)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.