日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式笔记——生成器模式(Builder Pattern)

發布時間:2023/12/9 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式笔记——生成器模式(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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。