定義
定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。工廠方法使一個(gè)類的實(shí)例化延遲到其子類
優(yōu)缺點(diǎn)
針對(duì)簡單工廠不容易擴(kuò)展,工廠方法將實(shí)例化延遲到子類工廠,從而提供擴(kuò)展
每次新增產(chǎn)品都需要添加工廠和具體產(chǎn)品類,增加系統(tǒng)復(fù)雜性
角色
- 客戶端 --> 抽象工廠,具體工廠, 抽象產(chǎn)品
- 抽象產(chǎn)品 --> 具體產(chǎn)品
- 具體產(chǎn)品
- 抽象工廠 --> 抽象產(chǎn)品
- 具體工廠 --> 抽象產(chǎn)品,具體產(chǎn)品
代碼
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 工廠方法
假設(shè)現(xiàn)在需要擴(kuò)展手機(jī)產(chǎn)品,增加鴻蒙OS手機(jī)
- 增加具體手機(jī)類
HarmonyPhone
- 修改靜態(tài)工廠方法增加HarmonyPhone判斷(違反開閉原則)
- 增加具體手機(jī)類
HarmonyPhone
- 增加具體工廠類
HarmonyFactory
總結(jié)
工廠方法模式是典型的解耦框架,通過增加抽象工廠,客戶端與具體產(chǎn)品解耦,抽象工廠與具體產(chǎn)品解構(gòu)
符合迪米特法則,不需要知道具體產(chǎn)品如何構(gòu)造
符合依賴倒置原則,只依賴產(chǎn)品類的抽象
符合里氏替換原則,父類出現(xiàn)的地方都可以用子類替換,因?yàn)闆]有破壞繼承體系
當(dāng)然最重要復(fù)合開閉原則,當(dāng)需要擴(kuò)展產(chǎn)品時(shí),并不需要改動(dòng)原來代碼,只需增加新的具體產(chǎn)品類,具體工廠類
示例代碼 - Github
|