C# 程式設計經典300例 實例091 建造不同的果園 建造者模式

        實例091要先看main函數的內容,對照圖8-7建造者模式結構圖,會比較容易懂。若是物件建造過程較複雜,可使用建造者模式。


實例描述


在北京與上海建造果園,每個果園水果品種都不同。範例利用果園建造者對具體的果園提供創建方法,再由果園建造者對具體的果園進行創建。


輸出「建造北京果園」、「北京果園種植北京蘋果和北京橘子」、「建造上海果園」與「上海果園種植上海蘋果和上海橘子」字串。


實現過程


main函數代碼如下:


//創建北京果園建造指導者


OrchardDirector bjOrchardDirector = new OrchardDirector(new BJOrchardBuilder());


Orchard bjOrchard = bjOrchardDirector.Construct();


bjOrchard.Plant();


//創建上海果園建造指導者


OrchardDirector shOrchardDirector = new OrchardDirector(new SHOrchardBuilder());


Orchard shOrchard = shOrchardDirector.Construct();


shOrchard.Plant();


 


//果園


public class Orchard


{


   string name;


   public string Apple { get; set;}


   public string Orange { get; set;}


   public Orchard(string name)


   {


       this.name = name;


       Console.WriteLine(“建造{0}果園!”, name);


   }


   public void Plant()


   {


       Console.WriteLine(“{0}果園種植{1}和{2}!”, name, Apple, Orange);


   }


}


 


//果園建造指導者


public class OrchardDirector


{


   OrchardBuilder orchardBuilder;


   public OrchardDirector( OrchardBuilder myClassBuilder)


   {


       this.orchardBuilder = myClassBuilder;


   }


   public Orchard Construct()


   {


       orchardBuilder.BuildApple();


       orchardBuilder.BuildOrange();


       return orchardBuilder.GetOrchard();


   }


}


 


//果園抽象建造者


public abstract class OrchardBuilder


{


   public abstract void BuildApple();


   public abstract void BuildOrange();


   public abstract Orchard GetOrchard();


}


 


//北京果園建造者


public class BJOrchardBuilder:OrchardBuilder


{


   Orchard  bjOrchard = new Orchard(“北京”);


   public override void BuildApple()


   {


       bjOrchard.Apple = “北京蘋果”;


   }


   public override void BuildOrange()


   {


       bjOrchard.Orange = “北京橘子”;


   }


   public override Orchard GetOrchard()


   {


       return bjOrchard;


   }


}


 


//上海果園建造者


public class SHOrchardBuilder:OrchardBuilder


{


   Orchard  shOrchard = new Orchard(“上海”);


   public override void BuildApple()


   {


       shOrchard.Apple = “上海蘋果”;


   }


   public override void BuildOrange()


   {


       shOrchard.Orange = “上海橘子”;


   }


   public override Orchard GetOrchard()


   {


       return shOrchard;


   }


}


代碼解析


通過OrchardDirector 實現了Orchard類別及創建的分離,降低了調用者對Orchard類創建的耦合性。


建造者模式主要用於結構比較複雜的對象創建,對於複雜對象可能存在多個部分需要創建,而且存在多種創建方法,通過建造者模式可以讓物件使用與創建過程分離。


 


 


留言

這個網誌中的熱門文章

異世界NTR web版第三章 觀後感 喧賓奪主 ,反派實力過強

持有縮小技能的D級冒險者,與聖女結婚並加入勇者團隊 漫畫 01-04 觀後感 大我與小我

泛而不精的我被逐出了勇者隊伍 web第三章 觀後感 菲莉真能打; 露娜超爽der