C# 程式設計經典300例 實例089 果園引進新品種 工廠方法模式

       前例實例 088 新增水果種類的時候必須更動舊的程式碼,才會有實例 089工廠方法模式,讀者要了解OCP與DIP才能了解為什麼要這樣寫?可參考《Agile Principles, Patterns, and Practices in C#》。


實例描述


工廠方法模式可以使用工廠的子類來決定需要實例化的類。


對於使用者而言,不需要知道具體實例化對象,只需依賴抽象的類。


範例定義一個抽象水果類和抽象果園類,然後抽象水果類別衍生出蘋果、橘子和香蕉,抽象果園類衍生出蘋果園、橘子園和香蕉園,分別由三個具體果園類來實現對三種水果的創建。


輸出「種植蘋果」、「種植橘子」與「種植香蕉」字串。


實現過程


//抽象水果類


public abstract class Fruit


{


   public abstract void Plant();


}


//具體蘋果類


public class Apple :Fruit


{


   public override void Plant()


   {


       Console.WriteLine(“種植蘋果”);


   }


}


//具體橘子類


public class Orange :Fruit


{


   public override void Plant()


   {


       Console.WriteLine(“種植橘子”);


   }


}


//具體香蕉類


public class Banana :Fruit


{


   public override void Plant()


   {


       Console.WriteLine(“種植香蕉”);


   }


}


//抽象水果園類


public abstract class Orchard


{


   public abstract Fruit CreateFruit();


}


//蘋果園類


public class AppleOrchard:Orchard


{


   public override Fruit CreateFruit()


   {


       return new Apple();


   }


}


//橘子園類


public class OrangeOrchard:Orchard


{


   public override Fruit CreateFruit()


   {


       return new Orange();


   }


}


//香蕉園類


public class BananaOrchard:Orchard


{


   public override Fruit CreateFruit()


   {


       return new Banana();


   }


}


main函數代碼如下:


Orchard appleOrchard = new AppleOrchard();


Fruit apple = appleOrchard.CreateFruit();


apple.Plant();


Orchard orangeOrchard = new OrangeOrchard();


Fruit orange = orangeOrchard.CreateFruit();


orange.Plant();


Orchard bananaOrchard = new BananaOrchard();


Fruit banana = bananaOrchard.CreateFruit();


banana.Plant();


代碼解析


依賴於抽象,而不依賴於具體類。


要新增一個水果葡萄,可新增Grape類別與GrapeOrchard類別,不會影響其他類型結構。


 


 


留言

這個網誌中的熱門文章

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

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

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