国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

設計模式(9)---建造者模式

2019-11-14 16:21:16
字體:
來源:轉載
供稿:網友

一、定義

建造者模式:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

解釋:使用建造者模式,用戶只需要指定需要構造的類型就可以得到它們,而具體建造的過程和細節就不需要知道。

 

二、UML類圖

三、基本代碼

class PRogram    {        static void Main(string[] args)        {            Director director = new Director();            Builder builder1 = new ConcreteBuilder1();            director.Construct(builder1);            Product product = builder1.GetProduct();            product.Show();            Console.Read();        }    }    class Product    {        IList<string> parts = new List<string>();        public void Add(string part)        {            parts.Add(part);        }        public void Show()        {            Console.WriteLine("/n product create");            foreach (string part in parts)            {                Console.WriteLine(part);            }        }    }    abstract class Builder    {        public abstract void BuildPartA();        public abstract void BuildPartB();        public abstract Product GetProduct();    }    class ConcreteBuilder1 : Builder    {        private Product product = new Product();        public override void BuildPartA()        {            product.Add("part A");        }        public override void BuildPartB()        {            product.Add("part B");        }        public override Product GetProduct()        {            return product;        }    }    class Director    {        public void Construct(Builder builder)        {            builder.BuildPartA();            builder.BuildPartB();        }    }

基本代碼中:Director指揮者指揮建造者對產品進行創建。所有具體建造者都繼承接口類builder,從而完成具體產品的創建。而在客戶端代碼中,首先實例化指揮者、具體建造者,指揮者指揮具體建造者對產品進行創建,從而完成生產產品的功能。

 

四、具體實例

   具體需求:采購員(客戶端)需要采購一批電腦,他會到電腦城找到老板(指揮者)說明要求,老板會安排人員按照客戶的要求進行電腦組裝。整個過程,采購員不會涉及到電腦組裝的復雜工程中去,他只負責提需求,然后采購到電腦即可。

產品類電腦:

    public class Computer    {        private IList<string> parts = new List<string>();        public void Add(string part)        {            parts.Add(part);        }        public void Show()        {            Console.WriteLine("電腦開始組裝.................");            foreach (string part in parts)            {                Console.WriteLine("組件" + part + "已裝好");            }            Console.WriteLine("電腦組裝好了");        }    }

 

抽象建造者:

public abstract class Builder    {        public abstract void BuildPartCPU();        public abstract void BuildPartMainBoard();        public abstract Computer GetComputer();    }

 

具體的建造者:

public class ConcreteBuilder1 : Builder    {        Computer computer = new Computer();        public override void BuildPartCPU()        {            computer.Add("CPU");        }        public override void BuildPartMainBoard()        {            computer.Add("main board");        }        public override Computer GetComputer()        {            return computer;        }    }

 

指揮者老板:

public class Director    {        public void Construct(Builder builder)        {            builder.BuildPartCPU();            builder.BuildPartMainBoard();        }    }

 

客戶端:

Director director = new Director();            Builder builder1 = new ConcreteBuilder1();            director.Construct(builder1);            Computer computer1 = builder1.GetComputer();            computer1.Show();

 

五、簡化示例:

在具體應用中,指揮者和抽象建造者可以省略一個或者都省略,本例中只有產品類和建造者:

產品類:

public class Product    {        private IList<string> parts = new List<string>();        public void Add(string part)        {            parts.Add(part);        }        public void Show()        {            Console.WriteLine("產品開始組裝.................");            foreach (string part in parts)            {                Console.WriteLine("組件" + part + "已裝好");            }            Console.WriteLine("產品組裝好了");        }    }
View Code

 

建造者:

public class Builder    {        private Product product = new Product();        public void BuildPartA()        {            product.Add("PartA");        }        public void BuildPartB()        {            product.Add("PartB");        }        public Product GetProduct()        {            return product;        }        public void Construct()        {            BuildPartA();            BuildPartB();        }    }
View Code

 

客戶端:

builder = new Builder();            builder.Construct();            Product product = builder.GetProduct();            product.Show();

 

六、總結

  建造者模式實現步驟:1)編寫產品類;2)編寫抽象建造者類(可省略);3)編寫具體的建造者;4)編寫指揮者類指揮建造者如何組裝產品;最后客戶端調用即可。建造者模式通過將建造代碼和表現代碼相分離,來實現組裝過程和具體部件解耦。并且對客戶端隱藏了組裝如何實現的內部細節,從而使客戶端無需關心如何組裝,只需要使用即可。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安多县| 剑河县| 广宁县| 勃利县| 西林县| 兰坪| 那曲县| 象山县| 平原县| 大港区| 任丘市| 弥渡县| 云浮市| 定安县| 湘阴县| 镇江市| 台湾省| 龙门县| 手机| 象山县| 胶南市| 红河县| 龙江县| 宝兴县| 彭水| 灵石县| 双牌县| 尖扎县| 勃利县| 鄯善县| 仁布县| 太湖县| 凤台县| 张北县| 龙南县| 沙坪坝区| 西贡区| 东港市| 土默特右旗| 略阳县| 博野县|