定義一個用於建立對象的接口,讓子類決定實例化哪個類。工廠方法使一個類的實例化延遲到其子類git
針對簡單工廠不容易擴展,工廠方法將實例化延遲到子類工廠,從而提供擴展github
每次新增產品都須要添加工廠和具體產品類,增長系統複雜性框架
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();
假設如今須要擴展手機產品,增長鴻蒙OS手機ide
HarmonyPhone
HarmonyPhone
HarmonyFactory
工廠方法模式是典型的解耦框架,經過增長抽象工廠,客戶端與具體產品解耦,抽象工廠與具體產品解構code
符合迪米特法則,不須要知道具體產品如何構造對象
符合依賴倒置原則,只依賴產品類的抽象繼承
符合里氏替換原則,父類出現的地方均可以用子類替換,由於沒有破壞繼承體系接口
固然最重要複合開閉原則,當須要擴展產品時,並不須要改動原來代碼,只需增長新的具體產品類,具體工廠類get