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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

13建造者模式(Builder)

發布時間:2023/12/10 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 13建造者模式(Builder) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Builder模式的緣起:
??? 假設創建游戲中的一個房屋House設施,該房屋的構建由幾部分組成,且各個部分富于變化。如果使用最直觀的設計方法,每一個房屋部分的變化,都將導致房屋構建的重新修正.....
動機(Motivation):
??? 在軟件系統中,有時候面臨一個"復雜對象"的創建工作,其通常由各個部分的子對象用一定算法構成;由于需求的變化,這個復雜對象的各個部分經常面臨著劇烈的變化,但是將它們組合到一起的算法卻相對穩定。
??? 如何應對種變化呢?如何提供一種"封裝機制"來隔離出"復雜對象的各個部分"的變化,從而保持系統中的"穩定構建算法"不隨需求的改變而改變?
意圖(Intent):
??? 將一個復雜對象的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。
??? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? -------《設計模式》GOF

結構圖(Struct):????
???????????????

協作(Collaborations):
??????????????????

生活中的例子:
?????????????
適用性:
????
1.當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。
??? 2.當構造過程必須允許被構造的對象有不同的表示時。
實例代碼:
Builder類:

?1??public?abstract?class?Builder
?2?????{
?3?????????public?abstract?void?BuildDoor();
?4?????????public?abstract?void?BuildWall();
?5?????????public?abstract?void?BuildWindows();
?6?????????public?abstract?void?BuildFloor();
?7?????????public?abstract?void?BuildHouseCeiling();
?8?????
?9?????????public?abstract?House?GetHouse();
10?????}

Director類:這一部分是?組合到一起的算法(相對穩定)。

1?public?class?Director
?2?????{
?3???????public?void?Construct(Builder?builder)
?4???????{
?5???????????builder.BuildWall();
?6???????????builder.BuildHouseCeiling();??????????
?7???????????builder.BuildDoor();
?8???????????builder.BuildWindows();
?9???????????builder.BuildFloor();?????????
10???????}
11?????}

ChineseBuilder類

?1????public?class?ChineseBuilder:Builder
?2?????{
?3????????private?House?ChineseHouse?=?new?House();
?4?????????public?override?void?BuildDoor()
?5?????????{
?6?????????????Console.WriteLine("this?Door?'s?style?of?Chinese");
?7?????????}
?8?????????public?override?void?BuildWall()
?9?????????{
10?????????????Console.WriteLine("this?Wall?'s?style?of?Chinese");
11?????????}
12?????????public?override?void?BuildWindows()
13?????????{
14?????????????Console.WriteLine("this?Windows?'s?style?of?Chinese");
15?????????}
16?????????public?override?void?BuildFloor()
17?????????{
18?????????????Console.WriteLine("this?Floor?'s?style?of?Chinese");
19?????????}
20?????????public?override?void?BuildHouseCeiling()
21?????????{
22?????????????Console.WriteLine("this?Ceiling?'s?style?of?Chinese");
23?????????}
24?????????public?override?House?GetHouse()
25?????????{
26?????????????return?ChineseHouse;
27?????????}
28?????}

RomanBuilder類:

?1?????class?RomanBuilder:Builder
?2?????{
?3?????????private?House?RomanHouse?=?new?House();
?4?????????public?override?void?BuildDoor()
?5?????????{
?6?????????????Console.WriteLine("this?Door?'s?style?of?Roman");
?7?????????}
?8?????????public?override?void?BuildWall()
?9?????????{
10?????????????Console.WriteLine("this?Wall?'s?style?of?Roman");
11?????????}
12?????????public?override?void?BuildWindows()
13?????????{
14?????????????Console.WriteLine("this?Windows?'s?style?of?Roman");
15?????????}
16?????????public?override?void?BuildFloor()
17?????????{
18?????????????Console.WriteLine("this?Floor?'s?style?of?Roman");
19?????????}
20?????????public?override?void?BuildHouseCeiling()
21?????????{
22?????????????Console.WriteLine("this?Ceiling?'s?style?of?Roman");
23?????????}
24?????????public?override?House?GetHouse()
25?????????{
26?????????????return?RomanHouse;
27?????????}
28?????}

ChineseBuilder和RomanBuilder這兩個是:這個復雜對象的兩個部分經常面臨著劇烈的變化。

?1???public?class?Client
?2?????{
?3?????????public?static?void?Main(string[]?args)
?4?????????{
?5?????????????Director?director?=?new?Director();
?6?
?7?????????????Builder?instance;
?8?
?9?????????????Console.WriteLine("Please?Enter?House?No:");
10?
11?????????????string?No?=?Console.ReadLine();
12?
13?????????????string?houseType?=?ConfigurationSettings.AppSettings["No"?+?No];
14?
15?????????????instance?=?(Builder)Assembly.Load("House").CreateInstance("House."?+?houseType);
16?
17?????????????director.Construct(instance);
18?
19?????????????House?house=?instance.GetHouse();
20?????????????house.Show();
21?
22?????????????Console.ReadLine();
23?????????}
24?????}

?

1?<?xml?version="1.0"?encoding="utf-8"??>
2?<configuration>
3???<appSettings>
4?????<add?key="No1"?value="RomanBuilder"></add>
5?????<add?key="No2"?value="ChineseBuilder"></add>
6???</appSettings>
7?</configuration>


Builder模式的幾個要點:

Builder模式 主要用于“分步驟構建一個復雜的對象”。在這其中“分步驟”是一個穩定的乘法,而復雜對象的各個部分則經常變化。

Builder模式主要在于應對“復雜對象各個部分”的頻繁需求變動。其缺點在于難以應對“分步驟構建算法”的需求變動。

Abstract Factory模式解決“系列對象”的需求變化,Builder模式解決“對象部分”的需求變化。Builder械通常和Composite模式組合使用。

總結

以上是生活随笔為你收集整理的13建造者模式(Builder)的全部內容,希望文章能夠幫你解決所遇到的問題。

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