设计形式之:Factory模式进化论(1)为什么要有工厂模式

设计模式之:Factory模式进化论(1)为什么要有工厂模式

谈到设计模式中的Factory模式,99%的人都会知道这个模式是干嘛的,当然也可能都有运用过这个设计模式.百度是这么告诉我的:"实例化对象,用工厂方法代替new操作",确实也是如此,工厂模式的确就是用来创建对象的,关于怎么通过工厂模式来创建对象这里就不在描述.这里主要描述一下为什么会有工厂模式,以及工厂模式的扩展形式

(1)为什么要有工厂模式?

要想知道为什么会有工厂模式,首先看一下一个在实际工作中经常碰到的调用场景:

设计形式之:Factory模式进化论(1)为什么要有工厂模式

 

在Application中会用到Shape类的一些方法,而且Circle以及Square的方法声明和Shape一样,因此在Application类中可以使用Circle以及Square的类的实例,这样就导致Application类需要依赖于Circle以及Square两个具体的实现类(违反了DIP原则)以及他们所在的包.如果一个包依赖的包越多,那么这个包的稳定性将受到它所依赖的包的影响.当一个应用中包的数量非常的大时,这种包与包的耦合关系会导致整个应用维护的困难.

 

如果引入了工厂模式,看看会变的怎么样?先看一下类图.

 设计形式之:Factory模式进化论(1)为什么要有工厂模式

 

在这个结构图中,Application对Shape现实类的依赖不需要通过new的方式去实现,而是直接调用了ShapeFactory的方法,虽然ShapeFactory的实现类依赖了Cricle2以及Square2,但是对这两个现实类的依赖被集中在了ShapeFactory的包中.这样就解决了对Shape具体现实类的依赖问题.