定义一个用于建立对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类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