前言:个人阅读工厂模式的时候看了两遍才稍微理解,可能事先阅读过简单工厂模式第一遍粗略阅读工厂模式就感觉有点懵,思维还是停留在简单工厂一大优点:工厂类中包含了必要的判断逻辑使其能动态实例化相关对象,从而除去了客户端和具体实现类之间的依赖,而工厂模式却将类的实例化放到了子类也就是说实例化哪一个对象的逻辑要在客户端去实现而不再是动态生成相关对象,为什么要这么做呢?我们先来看下用工厂模式实现的计算机程序代码:
创建工厂接口:
public interface IFactory {
//Operation对象是上篇简单工厂模式博文中的Operation Operation CreateOperation(); }
创建具体工厂实现工厂接口:
public class AddFactory : IFactory { public Operation CreateOperation() { return new Add(); } } public class SubFactory : IFactory { public Operation CreateOperation() { return new Sub(); } } public class MulFactory : IFactory { public Operation CreateOperation() { return new Mul(); } } public class DivFactory : IFactory { public Operation CreateOperation() { return new Div(); } }
调用方式:
IFactory factory = new AddFactory(); Operation oper = factory.CreateOperation(); oper.NumberA = 1; oper.NumberB = 2; Console.WriteLine(oper.GetResult());
上述代码正如前言中说到“具体的类的实例化放在了子类中”,这就造成实例化具体类的这部分逻辑要客户端去实现,同时若要实现拓展也不像简单工厂那样只需添加一个case和一个具体的实现类,而是需要添加一个具体实现类的同时还要添加一个与之对应的工厂类。
这也正是工厂模式相对于简单工厂模式的一大缺点,当然既然大牛们既然总结出工厂模式那么肯定有它的优点。
工厂模式和简单工厂模式一样具有封装对象创建过程的优点,同时也解决了简单工厂模式中存在的一个问题,在简单工厂模式中我们在实现拓展的时候需要添加一个case 这就需要我们去修改工厂类,而这就违背了面向对象的五大设计原则中的开闭原则(对拓展开放对修改关闭),由于使用了多态性工厂模式很好的解决了这一问题。
结论:
工厂模式是简单工厂模式的进一步抽象,同时也进一步完善了简单工厂模式的缺陷。
以上内容是个人阅读《大话设计模式》后写的算是加深印象从中加入了一些个人的理解和感悟
源码:https://gitee.com/lxd_8023/design_pattern
原文:https://www.cnblogs.com/azhi98/p/11962619.html