设计模式笔记——生成器模式(Builder Pattern)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                设计模式笔记——生成器模式(Builder Pattern)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            一、概述 在軟件系統中,把構造對象實例的邏輯移到了類的外部,在這個類的外部定義了類的邏輯。它把一個復雜對象的構造過程從對象的表示中分離出來了,其直接效果是將一個復雜的對象簡化為一個比較簡單的目標對象。它強調的是產品構造過程。 ? 二、意圖 將一個復雜對象的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。 ? 三、Builder模式的結構  Builder:為創建Product對象的各個部件指定抽象接口。 ConcreteBuilder:實現Builder的接口以構造和裝配該產品的各個部件,定義并明確它所創建的表示,并提供一個檢索產品的接口。 Director:構造一個使用Builer接口的對象。 Product:表示被構造的復雜對象。ConcreteBuilder創建該產品的內部表示并定義它的裝配過程,包含定義組成部件的類,以及將這些部件裝配成最終產品的接口。 ? 四、舉例: 我們用KFC套餐為例,KFC中存在以下對象,各種食物Product,有收銀員Director,可配置套餐菜單接口(主食+零食+飲料)Builder,具體套餐搭配ConcreteBuilder。 
                        
                        
                        1. 首先給定可配置套餐菜單接口(主食+零食+飲料)Builder:
?
abstract public class Builder{// BuildPartA,BuildPartB,BuildPartC具體的套餐方法abstract public void BuildPartA();abstract public void BuildPartB();abstract public void BuildPartC();abstract public Product GetResult();}2.我們需要KFC的產品:
?
public class Product{ArrayList parts = new ArrayList();public void Add(string part){parts.Add(part);}public void Show(){Console.WriteLine(" Product Parts -------");foreach (string part in parts)Console.WriteLine(part);}}?
3. 然后,我們給出具體套餐搭配ConcreteBuilderA:
?
public class ConcreteBuilderA:Builder{private Product product;// Methodsoverride public void BuildPartA(){product = new Product();product.Add("麥香雞腿堡");}override public void BuildPartB(){product.Add("加冰可樂");}override public void BuildPartC(){product.Add("大薯條");}override public Product GetResult(){return product;}}?4. 然后,我們給出具體套餐搭配ConcreteBuilderB:
?
public class ConcreteBuilderB:Builder{private Product product;// Methodsoverride public void BuildPartA(){product = new Product();product.Add("香辣雞腿堡");}override public void BuildPartB(){product.Add("可樂不加冰");}override public void BuildPartC(){product.Add("小薯條");}public override Product GetResult(){return product;}}
5. 現在我們需要一個收銀員Director:
?
public class Director{public void Construct(Builder builder){builder.BuildPartA();builder.BuildPartB();builder.BuildPartC();}}6. 最后我們完成Client購買KFC套餐:
?
class Program{static void Main(string[] args){Director director = new Director();Builder b1 = new ConcreteBuilderA();Builder b2 = new ConcreteBuilderB();director.Construct(b1);Product p1 = b1.GetResult();p1.Show();director.Construct(b2);Product p2 = b2.GetResult();p2.Show();Console.ReadKey();}}?
?這樣Client分別買了兩種不同的套餐,Client只需要讓收款員知道你需要那種套餐即可,不需要了解具體套餐是如何實現的。
五、優點: ?1.建造者模式的“加工工藝”是暴露的,這樣使得建造者模式更加靈活。 ?2.解耦了組裝過程和創建具體部件,使得我們不用去關心每個部件是如何組裝的。--上面對KFC的分析可以很清楚的看出這點。 六、適用環境: ?1.需要生成的產品對象有復雜的內部結構。 ?2.需要生成的產品對象的屬性相互依賴,建造者模式可以強迫生成順序。 ?3.在對象創建過程中會使用到系統中的一些其它對象,這些對象在產品對象的創建過程中不易得到。 參考文獻: 《.NET應用架構設計原則、模式與實踐》 王洋 著轉載于:https://www.cnblogs.com/Abel-Zhang/p/BuilderPattern.html
總結
以上是生活随笔為你收集整理的设计模式笔记——生成器模式(Builder Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【操作系统】对操作系统的了解
- 下一篇: 硬盘分区表知识
