前言:
GOF经典的23种设计模式在IT界现已被广为流传。由于比较长时间没有用了,个人对于不同模式与模式之间的区别也渐渐模糊,故开始重温设计模式的思想。也希望更给对设计模式感兴趣的朋友些许的启发。
----------------------------------
需求情境:
设计一款具有基本计算功能的计算器。
-----------------------------------
初次看到这个需求,假如你从没有接触过设计模式,那么你应该很快可以把基本的逻辑语句用10行以内的代码搞定。
但是,现在我们将设计模式考虑进来,即注重代码的效率也考虑代码的可扩展性,让其尽量地满足面向对象的思想。本文主要对比一下简单工厂以及工厂方法在此情景需求下的实现方式。
一.简单工厂
概念:简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
图一:简单工厂模式的UML
二.工厂方法
概念:核心工厂类不再负责产品的创建,成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口。
图二:工厂方法模式的UML
通过对比我们可以发现:
1)简单工厂主要适合由工厂创造的“产品”(product)功能要求单一,而且区分界限明显【缺点:对工厂的方法开放‘修改’】
比如:计算器加减乘除运算仅返回一个result(),由‘+、-、*、/’进行自动区分;
2)工厂方法适合工厂制造的product具有多功能,标准化工厂接口,具体产品由实现该接口的子工厂实现【缺点:将具体产品的生产“判断”抛出到了客户端,而且增加额外的开发代码量】。