最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET建造者模式講解

 更新時間:2016年10月27日 16:34:27   作者:Yangyi.He  
這篇文章主要為大家詳細介紹了ASP.NET建造者模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

建造者模式的定義:

將一個復(fù)雜對象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示,這樣的設(shè)計模式被稱為建造者模式

建造者模式結(jié)構(gòu)圖:

建造者模式角色:

1 builder:為創(chuàng)建一個產(chǎn)品對象的各個部件指定抽象接口。
2 ConcreteBuilder:實現(xiàn)Builder的接口以構(gòu)造和裝配該產(chǎn)品的各個部件,定義并明確它所創(chuàng)建的表示,并提供一個檢索產(chǎn)品的接口。
3 Director:構(gòu)造一個使用Builder接口的對象。
4 Product:表示被構(gòu)造的復(fù)雜對象。ConcreteBuilder創(chuàng)建該產(chǎn)品的內(nèi)部表示并定義它的裝配過程,包含定義組成部件的類,包括將這些部件裝配成最終產(chǎn)品的接口。

下面通過過現(xiàn)實生活中的建房子的例子,來詮釋建造者模式:

1.抽象出建造者接口,里面有待實現(xiàn)的創(chuàng)建房子種類的條件,創(chuàng)建后返回房間的數(shù)量,以及這件房子的描述信息。

 /// <summary>
 /// 抽象建造者
 /// </summary>
 public interface IHouse
 {
 /// <summary>
 /// 創(chuàng)建房子種類的條件
 /// </summary>
 /// <returns></returns>
 bool GetBackyard();

 /// <summary>
 /// 創(chuàng)建的房間數(shù)
 /// </summary>
 /// <returns></returns>
 long NoOfRooms();

 /// <summary>
 /// 描述
 /// </summary>
 /// <returns></returns>
 string Description();
 }

2.繼承IHouse接口,具體建造者,這里創(chuàng)建了一件房間,里面包括客廳,廚房,洗手間,臥室,共四件房間這樣一座房子。

 public class CRoom
 {
 public string RoomName { get; set; }
 }

 /// <summary>
 /// 具體建造者
 /// </summary>
 public class CSFH:IHouse
 {
 private bool mblnBackyard;
 private Hashtable Rooms;

 public CSFH() {
 CRoom room = new CRoom();
 room.RoomName = "一樓客廳";
 Rooms = new Hashtable();
 Rooms.Add("room1", room);

 room = new CRoom();
 room.RoomName = "一樓廚房";
 Rooms.Add("room2", room);

 room = new CRoom();
 room.RoomName = "一樓洗手間";
 Rooms.Add("room3", room);

 room = new CRoom();
 room.RoomName = "一樓臥室";
 Rooms.Add("room4",room);

 mblnBackyard = true;
 }

 public bool GetBackyard()
 {
 return mblnBackyard;
 }

 public long NoOfRooms()
 {
 return Rooms.Count;
 }

 public string Description()
 {
 IDictionaryEnumerator myEnumerator = Rooms.GetEnumerator();
 string strDescription = "這個房子共 " + Rooms.Count + " 間 \n";
 while (myEnumerator.MoveNext())
 {
 strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName; 
 }
 return strDescription;
 }
 }

3.繼承IHouse接口,具體建造者,這里創(chuàng)建了一件房子,里面只包括臥室,客廳,廚房共三件房間這樣一座房子。

 /// <summary>
 /// 其他具體建造者
 /// </summary>
 public class CApt:IHouse
 {
 private bool mblnBackyard;
 private Hashtable Rooms;

 public CApt()
 { 
 Rooms = new Hashtable();
 CRoom room = new CRoom();
 room.RoomName = "臥室";
 Rooms.Add("room1", room);

 room = new CRoom();
 room.RoomName = "客廳";
 Rooms.Add("room2", room);

 room = new CRoom();
 room.RoomName = "廚房";
 Rooms.Add("room3", room);

 mblnBackyard = false;
 }

 public bool GetBackyard()
 {
 return mblnBackyard;
 }
 
 public long NoOfRooms(){
 return Rooms.Count; 
 }

 public string Description(){
 IDictionaryEnumerator myEnumerator = Rooms.GetEnumerator();
 string strDescription = "這個房子一共 " + Rooms.Count + " 間 \n";
 while (myEnumerator.MoveNext())
 {
  strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName; 
 }
 return strDescription;
 }
 }

4.創(chuàng)建指導者,指導要求哪一個建造者去建造什么樣子的房間。

 /// <summary>
 /// 指導者
 /// </summary>
 public class CDirector
 {
 public IHouse BuildHouse(bool blnBackyard)
 {
 if (blnBackyard)
 {
 return new CSFH();
 }
 else
 {
 return new CApt(); 
 }
 }
 }

5.創(chuàng)建:

 static void Main(string[] args)
 {
 CDirector objDirector = new CDirector();//實例化指導者
 IHouse objHouse;
 string Input = Console.ReadLine();//輸入條件指導哪位創(chuàng)建者創(chuàng)建房間
 objHouse = objDirector.BuildHouse(bool.Parse(Input));
 Console.WriteLine(objHouse.Description());
 Console.ReadLine();
 }

建造者模式主要用于“分步驟構(gòu)建一個復(fù)雜的對象”,在這其中“分步驟”是一個穩(wěn)定的算法,而復(fù)雜對象的各個部分則經(jīng)常變化

產(chǎn)品不需要抽象類,特別是由于創(chuàng)建對象的算法復(fù)雜而導致使用此模式的情況下或者此模式應(yīng)用于產(chǎn)品的生成過程,其最終結(jié)果可能差異很大,不大可能提煉出一個抽象產(chǎn)品類。

前面的抽象工廠模式解決“系列對象”的需求變化,Builder 模式解決“對象部分”的需求變化。

建造者模式的使用使得產(chǎn)品的內(nèi)部表象可以獨立的變化。使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細節(jié)

每一個Builder都相對獨立,而與其它的Builder無關(guān)。

建造者模式適用于需要生成的產(chǎn)品對象的屬性相互依賴,建造者模式可以強迫生成順序。需要生成的產(chǎn)品對象有復(fù)雜的內(nèi)部結(jié)構(gòu)。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

夏津县| 鹿邑县| 宣威市| 水富县| 开化县| 平果县| 纳雍县| 华蓥市| 遂溪县| 东方市| 尚义县| 麟游县| 大埔县| 阳朔县| 开平市| 个旧市| 定结县| 青州市| 双辽市| 通榆县| 个旧市| 称多县| 卓资县| 宣恩县| 开远市| 尼玛县| 平远县| 额济纳旗| 会昌县| 民乐县| 习水县| 刚察县| 昌吉市| 恩平市| 温州市| 遂川县| 酒泉市| 湖口县| 南汇区| 石门县| 灌阳县|