为什么要使用工厂设计模式?

工厂设计模式我用得也挺多的(spring里面到处都是),其思想也多多少少接触过,但是从来没有总结过。所以今天我打算好好理解一下为什么要使用工厂设计模式。

 

一、我的个人理解

假设有一个场景,需要用到数据库链接(暂定是oracle数据库),那么可以这样写:

在每个我需要获得oracle的链接的地方,都要重新创建Oracle对象,然后获取链接:

假如有一天,我需要更换Mysql数据库,怎么办?岂不是要改成这样?

要改动的地方实在是太多了,而且耦合度很高啊,在每个需要获得数据库链接的地方都要这样改,怎么受得了。

这里可以改良一下,因为Mysql和Oracle同属数据库链接(功能相近),所以完全可以设计一个db接口:

这样要改的东西就少了。如果要从oracle改成mysql,直接改

中的Mysql对象就好了。

那么问题又来了,万一用到数据库链接的地方很多,那岂不是要改一大堆Mysql对象?能不能统一进行管理,通过一个方法去获取?这样我只要改一个方法就好了:

只需要改DbFactoryImpl实现类中的getDbConnection方法就好,其他的方法都不需要改。

现在需求又提高了。能不能通过配置文件来更改getDbConnection中的Mysql实现类,而不需要重新编译?

这里就要换一种类的创建方式,不使用new,而使用newinstance,并且相应的改成:

这样我们就不需要再重新编译,就可以更换DbConnection的实现类(这里有点spring注入的感觉)。

以上的设计思路,就是工厂模式。我们通过工厂模式,把创建对象这一功能写成方法,由工厂类统一提供,可以方便代码的管理和维护。

至于缺点,我个人在设计模式上涉猎较浅,并未觉得有明显的问题。

二、总结

工厂模式非常科学,值得使用。