C# 程式設計經典300例 實例090 開闢新的果園 抽象工廠模式

        實例089 變動因素只一有個水果種類,實例090 變動因素新增地點,果園有分上海果園與北京果園。最後有88、89、90 三個範例之間的比較,非常值得參考。


實例描述


抽象工廠模式是工廠方法模式的擴展,主要功能是實現多個相關的對象進行創建,創建過程同樣依賴於抽象類。


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


實現過程


//抽象蘋果類


public abstract class Apple


{


   public abstract void PlantApple();


}


//北京蘋果類


public class BJApple:Apple


{


   public override void PlantApple()


   {


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


   }


}


//上海蘋果類


public class SHApple:Apple


{


   public override void PlantApple()


   {


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


   }


}


 


//抽象橘子類


public abstract class Orange


{


   public abstract void PlantOrange();


}


 


//北京橘子類


public class BJOrange:Orange


{


   public override void PlantOrange()


   {


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


   }


}


//上海橘子類


public class SHOrange:Orange


{


   public override void PlantOrange()


   {


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


   }


}


//抽象果園類


public abstract class Orchard


{


   public abstract Apple CreateApple();


   public abstract Orange CreateOrange();


}


 


//北京果園類


public class BJOrchard:Orchard


{


   public override Apple CreateApple()


   {


        return new BJApple();


   }


   public override Orange CreateOrange()


   {


       return new BJOrange();


   }


}


 


//上海果園類


public class SHOrchard:Orchard


{


   public override Apple CreateApple()


   {


        return new SHApple();


   }


   public override Orange CreateOrange()


   {


       return new SHOrange();


   }


}


main函數代碼如下:


Orchard bjFruitFactory = new BJOrchard();


Apple bjApple = bjFruitFactory.CreateApple();


Orange bjOrange = bjFruitFactory.CreateOrange();


bjApple.PlantApple();


bjOrange.PlantOrange();


Orchard shFruitFactory = new SHOrchard();


Apple shApple = shFruitFactory.CreateApple();


Orange shOrange = shFruitFactory.CreateOrange();


shApple.PlantApple();


shOrange.PlantOrange();


代碼解析


範例中抽象蘋果類衍生北京蘋果類與上海蘋果類、抽象橘子類衍生北京橘子類與上海橘子類。再創建一個抽象果園類Orchard,這類別相當於抽象工廠類,提供創建Apple類與Orange類的抽象方法。Orchard類別衍生北京Orchard與上海Orchard。


main函數中,Apple類與Orange類只依賴於Orchard的兩個創建方法,符合依賴倒置原則。


工廠模式主要實現了類型的創建,屬於創建型設計模式。


簡單工廠模式通過一個具體工廠類,利用具體的創建方法選擇性地創建單一類實例。


工廠方法模式通過一個抽象的工廠類,利用一個抽象的創建方法創建單一類實例。


抽象工廠模式則通過一個抽象的工廠類,利用多個抽象方法創建一組相關連的類實例。


如果只有一個果園且果園只有蘋果和橘子兩種固定水果,可使用簡單工廠方法。


水果的品種一直增加,需要考慮工廠方法模式。


如果需要在多個地區建造果園,果園中水果也存在不同的品種,就需要使用抽象工廠模式。


 


 


留言

這個網誌中的熱門文章

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

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

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