简单工厂模式的类图如下:
简单工厂根据具体的指令创建指定的对象,简单工厂能创建的对象各类事先都是在代码里面写好的。
工厂方法模式的类图如下:
两种方式做一个对比,以需求的变化,来显示更改的内容和位置
什么样的需求?计算器要求添加新的运算种类 开平方
简单工厂里面需要加上开平方的功能类,然后去更改工厂类,添加case语句
这样客户端需要开平方的功能时,只需要传入开平方的标识就好了
要是工厂方法的话,添加开平方功能类,添加开平方工厂类,还得修改客户端
增加了客户端的复杂性。
简单工厂和工厂方法的区别:
简单模式最大的优点是工厂类中包含了必要的逻辑判断,根据客户端的选择动态的选择实例化功能类,对于客户端解除了依赖
工厂模式实现时,客户端需要决定实例化哪一个工厂类来实现 运算,选择判断的问题还是存在的,工厂方法把简单工厂 的内部逻辑移到了客户端来进行,想加功能原来是改工厂类,现在是改客户端
工厂方法克服了简单工厂违背的开闭原则,又保持了封装对象创建过程的优点
工厂方法保持了简单工厂的优点,克服了缺点,但缺点是由于每增加一个产品就需要增加一个产品的工厂类,增加了开发量