简单工厂模式的核心是通过建立工厂类,此工厂类根据传递的参数不同,实例化不同的具体类。这里面涉及到几部分内容:
1.工厂类:负责创建具体类实例
2.抽象类 :所有具体类的抽象父类,可以是接口,也可以是普通类,更可以是抽象类
3.具体类 :抽象类的具体实现类,一般有多个。
采用简单工厂模式的初衷是要把client端从对类的实例化中解放出来(对其隐藏具体类的实例化过程),而有专门的工厂类负责所有的具体类得实例化,而具体要实例化哪个类,则有传递的参数决定。
这样做的好处很明显:
1.对于经常要变化的内容进行封装,便于维护(封装变化点原则)
2.把Client于具体类隔离,降低耦合。
有例为证:
采用简单工厂模式,可以有效脱离这种困境:
工厂类:
Client:
需要说明的是,工厂类实现哪个类,是有client传递的dbtype参数决定的,而通常我们可以把它配置在web.config中,便于维护。
可以发现,上述工厂类对具体类的实现,是通过判断参数来进行区别的,虽然看起来有些不雅,但通常可以解决很多的问题。随后读得抽象工厂模式,利用发射机制可能可以有效的解决这个问题。
【实践】
WMS系统中的入库作业很多的movement Type,不同的mvt在抛转ERP时要调用不同的RFC或者进行很多不同的操作。并且,实践证明,mvt的增加/减少在无休止的进行...这样,我们必须把这个抛转的动作进行抽象封装,使得这个变化点易于维护和扩展。
如图所示:根据不同的MVT,执行不同的动作
此为一个简单的应用Demo.
SourceCode:/Files/Ivan-Yan/SimpleFactoryPattern.rar
参考文章:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html
大话设计模式