亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

.NET建造者模式講解

 更新時間:2016年10月27日 16:34:27   作者:Yangyi.He  
這篇文章主要為大家詳細(xì)介紹了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)建指導(dǎo)者,指導(dǎo)要求哪一個建造者去建造什么樣子的房間。

 /// <summary>
 /// 指導(dǎo)者
 /// </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();//實例化指導(dǎo)者
 IHouse objHouse;
 string Input = Console.ReadLine();//輸入條件指導(dǎo)哪位創(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ù)雜而導(dǎo)致使用此模式的情況下或者此模式應(yīng)用于產(chǎn)品的生成過程,其最終結(jié)果可能差異很大,不大可能提煉出一個抽象產(chǎn)品類。

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

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

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

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

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

相關(guān)文章

  • Net?core中使用System.Drawing對上傳的圖片流進行壓縮(示例代碼)

    Net?core中使用System.Drawing對上傳的圖片流進行壓縮(示例代碼)

    這篇文章主要介紹了Net?core中使用System.Drawing對上傳的圖片流進行壓縮,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Redis緩存詳解

    Redis緩存詳解

    本文主要介紹了Redis緩存從搭建到使用的相關(guān)知識,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • VS2010制作第一個簡單網(wǎng)站

    VS2010制作第一個簡單網(wǎng)站

    這篇文章主要為大家介紹VS2010如何制作第一個簡單網(wǎng)站,和大家一起學(xué)習(xí) 動態(tài)網(wǎng)站開發(fā)技術(shù),感興趣的小伙伴們可以參考一下
    2015-11-11
  • 解決ASP.NET中Type.GetType方法總返回空的問題

    解決ASP.NET中Type.GetType方法總返回空的問題

    今天做練習(xí)的時候用到了Type.GetType方法。。 可是他總返回null。。
    2008-03-03
  • ASP.NET實現(xiàn)大文件上傳功能

    ASP.NET實現(xiàn)大文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了ASP.NET實現(xiàn)大文件上傳功能,解決了 ASP.NET 中的大文件上傳問題,感興趣的朋友可以參考一下
    2016-07-07
  • 如何對ASP.NET網(wǎng)站實現(xiàn)靜態(tài)化

    如何對ASP.NET網(wǎng)站實現(xiàn)靜態(tài)化

    對于訪問量比較大的網(wǎng)站,網(wǎng)頁靜態(tài)化是一個比較可靠的解決方案。靜態(tài)化將顯著降低服務(wù)器的壓力,提升服務(wù)器處理能力。下面將介紹兩種不同的實現(xiàn)方法,并進行對比。
    2015-09-09
  • .NET微信公眾號查看關(guān)注者接口

    .NET微信公眾號查看關(guān)注者接口

    這篇文章主要為大家詳細(xì)介紹了.NET微信公眾號查看關(guān)注者接口的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • GridView分頁的實現(xiàn)以及自定義分頁樣式功能實例

    GridView分頁的實現(xiàn)以及自定義分頁樣式功能實例

    本文為大家詳細(xì)介紹下GridView實現(xiàn)分頁并自定義的分頁樣式,具體示例代碼如下,有想學(xué)習(xí)的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • ASP.NET Core使用EF保存數(shù)據(jù)、級聯(lián)刪除和事務(wù)使用

    ASP.NET Core使用EF保存數(shù)據(jù)、級聯(lián)刪除和事務(wù)使用

    這篇文章介紹了ASP.NET Core使用EF保存數(shù)據(jù)、級聯(lián)刪除和事務(wù)使用的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • .net?6項目實現(xiàn)壓縮發(fā)布

    .net?6項目實現(xiàn)壓縮發(fā)布

    這篇文章介紹了.net?6項目實現(xiàn)壓縮發(fā)布的方式,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論