定義
定義一個用于創建物件的介面,讓子類決定實體化哪一個類,工廠方法使一個類的實體化延遲到其子類
優缺點
- 優點
針對簡單工廠不容易擴展,工廠方法將實體化延遲到子類工廠,從而提供擴展
- 缺點
每次新增產品都需要添加工廠和具體產品類,增加系統復雜性
角色
- 客戶端 --> 抽象工廠,具體工廠, 抽象產品
- 抽象產品 --> 具體產品
- 具體產品
- 抽象工廠 --> 抽象產品
- 具體工廠 --> 抽象產品,具體產品
代碼
- 抽象產品
public abstract class Phone
{
public abstract void Call();
}
- 具體產品
public class IPhone : Phone
{
public override void Call()
{
System.Console.WriteLine("Call by IPhone");
}
}
public class AndroidPhone : Phone
{
public override void Call()
{
System.Console.WriteLine("Call by Android");
}
}
- 抽象工廠
public abstract class PhoneFactory
{
public abstract Phone Create();
}
- 具體工廠
public class IPhoneFactory : PhoneFactory
{
public override Phone Create()
{
return new IPhone();
}
}
public class AndroidFactory : PhoneFactory
{
public override Phone Create()
{
return new AndroidPhone();
}
}
- 客戶端
Phone phone = new IPhoneFactory().Create();
phone.Call();
phone = new AndroidFactory().Create();
phone.Call();
簡單工廠 VS 工廠方法
假設現在需要擴展手機產品,增加鴻蒙OS手機
- 簡單工廠
- 增加具體手機類
HarmonyPhone - 修改靜態工廠方法增加HarmonyPhone判斷(違反開閉原則)
- 工廠方法
- 增加具體手機類
HarmonyPhone - 增加具體工廠類
HarmonyFactory
總結
工廠方法模式是典型的解耦框架,通過增加抽象工廠,客戶端與具體產品解耦,抽象工廠與具體產品解構
符合迪米特法則,不需要知道具體產品如何構造
符合依賴倒置原則,只依賴產品類的抽象
符合里氏替換原則,父類出現的地方都可以用子類替換,因為沒有破壞繼承體系
當然最重要復合開閉原則,當需要擴展產品時,并不需要改動原來代碼,只需增加新的具體產品類,具體工廠類
示例代碼 - Github
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/12588.html
標籤:設計模式
上一篇:【設計模式】簡單工廠模式
下一篇:軟體設計七大原則
