比起简单的工厂模式来说,工厂方法模式将控制使用哪个产品由使用工厂控制变成了客户端控制使用哪个工厂(每个工厂对应一个产品)。新加产品时,只需要添加新的具体产品类和对应的工厂就行了,更改客户端逻辑。但是是简单工厂的话,就需要添加一个产品类,然后修改工厂的代码了,不符合开闭原则。
//抽象的工厂 public interface INormalFactory { INormalProduct CreateProduct(); }
//抽象的产品 public interface INormalProduct { void DoSomething(); }
//具体的产品 using UnityEngine; public class ProductA : INormalProduct { public void DoSomething() { Debug.Log("我是产品A"); } }
//具体产品A对用的生成工厂 public class FactoryA : INormalFactory { public INormalProduct CreateProduct() { return new ProductA(); } }
这样的话,如果要添加产品B就简单了,新加两个实现类分别为产品B和工厂B来提供给客户端使用就行了。