以下是一个工厂生产课程的例子设计模式
用到了简单工厂设计模式,已经遵循的原则:优化
依赖倒置原则spa
迪米特法则设计
里氏代换原则对象
接口隔离原则blog
因为工厂类集中了全部实例的建立逻辑,这就直接致使一旦这个工厂出了问题,全部的客户端都会受到牵连。当咱们新增长一个产品的时候必须修改工厂类,相应的工厂类就须要从新编译一遍接口
违背了OCP开闭原则产品
因为简单工厂模式的产品是基于一个共同的抽象类或者接口,这样一来,产品的种类增长的时候,即有不一样的产品接口或者抽象类的时候,工厂类就须要判断什么时候建立何种接口的产品,这就和建立何种种类的产品相互混淆在了一块儿,违背了单一职责原则,致使系统丧失灵活性和可维护性编译
优化以后以下:class
使用工厂方法设计模式
经过定义工厂父类负责定义建立对象的公共接口,而子类则负责生成具体的对象
这样就将类的实例化(具体产品的建立)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化(建立)哪个类
之因此能够解决简单工厂的问题,是由于工厂方法模式把具体产品的建立推迟到工厂类的子类(具体工厂)中,此时工厂类再也不负责全部产品的建立,而只是给出具体工厂必须实现的接口,这样工厂方法模式在添加新产品的时候就不修改工厂类逻辑而是添加新的工厂子类,符合开放封闭原则,克服了简单工厂模式中缺点
下期预告:抽象工厂模式