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類別,不會影響其他類型結構。
留言
張貼留言