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的兩個創建方法,符合依賴倒置原則。
工廠模式主要實現了類型的創建,屬於創建型設計模式。
簡單工廠模式通過一個具體工廠類,利用具體的創建方法選擇性地創建單一類實例。
工廠方法模式通過一個抽象的工廠類,利用一個抽象的創建方法創建單一類實例。
抽象工廠模式則通過一個抽象的工廠類,利用多個抽象方法創建一組相關連的類實例。
如果只有一個果園且果園只有蘋果和橘子兩種固定水果,可使用簡單工廠方法。
水果的品種一直增加,需要考慮工廠方法模式。
如果需要在多個地區建造果園,果園中水果也存在不同的品種,就需要使用抽象工廠模式。
留言
張貼留言