什么是工厂方法?
工厂方法模式(Factory Method Pattern),也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
优点:
在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责哪一个产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
结构图:
代码
错误写法(没有写产品类的接口)
//构建苹果手机工厂接口 interface IApplePhoneFactory { //获取尺寸 void getSize(); }
//建立具体工厂去实现接口 public class IphoneXFactory:IApplePhoneFactory{ public void getSize() { Console.WriteLine("iPhoneX屏幕:3.5英寸"); } } public class IphoneXsFactory:IApplePhoneFactory{ public void getSize() { Console.WriteLine("iPhoneX屏幕:4.5英寸"); } } public class IphoneXRFactory:IApplePhoneFactory{ public void getSize() { Console.WriteLine("iPhoneX屏幕:5.5英寸"); } }
//客户端实现 IApplePhoneFactory factory=new IphoneXFactory(); factory.getSize();
正确写法
//工厂接口 interface IApplePhoneFactory { //获取具体产品(返回值类型是产品接口类) IAppleProduct getAppleProduct(); } //抽象的产品接口 public interface IAppleProduct { void ProductIphone(); } //苹果X产品的具体实现工厂 public class IphoneXFactory : IApplePhoneFactory { //实现 public IAppleProduct getAppleProduct() { return new IphoneXProduct(); } } //苹果X产品生产类 public class IphoneXProduct : IAppleProduct { public void ProductIphone() { Console.WriteLine("我是苹果X"); } }
客户端是通过里氏替换原则实现
static void Main(string[] args) { //我要一个苹果X手机 IApplePhoneFactory applexPhone = new IphoneXFactory(); IAppleProduct X = applexPhone.getAppleProduct(); X.ProductIphone(); }