工厂模式的一点感悟

最近再次翻看刘伟大师的《设计模式的艺术》,对于工厂模式又有了一点感悟在这里赶紧记录一下。

我们在工作中经常会看到代码中有工厂模式的影子,可有没有细细品味为什么要使用工厂模式呢,换句话说工厂模式都解决了什么问题,我一一列举一下:

1. 要将对象的创建与使用分离

我们为什么要将创建与使用分离开了,网上有人说是为了解耦,可解耦的目的又是什么呢?我觉得有两个方面的好处,首先保证类的单一职责,尽量保证类的功能相对单一,避免类功能过多,这样这个类受到的制约就多,会造成牵一发动全身,那就违反了开闭原则。另一点就是避免了代码的冗余,比如你需要在一个对象A中使用另一个对象B,如果在A中去创建B,那么将来C也要使用B怎么办,可能你还需要把在A中创建B的代码再写一遍,Ctrl C V,给人一种很low的感觉。

2. 方便进行同一类型的工作不同处理方式的切换

比如你有一个日志记录功能,那么可能不同的阶段你需要使用不同的日志存储方式,比如把日志记录在文件中,执行文件写操作,或者是记录在数据库中,所谓的同一类型就是指都完成日志记录的工作,但是却使用不同的处理方式,如果你没有进行使用和创建解耦,则会造成每次切换处理方式都需要进行代码的修改,那么必然经历提交测试发布的流程,还可能造成一些其他问题,但是如果你使用工厂模式(简单工厂,工厂模式)都可以通过配置的方式完成功能的切换,你只需要修改一下xml或者yml或者properties文件就可以完成这项工作。

3. 方便复杂对象的初始化

我们都知道一个对象的生成需要经历几个重要的阶段,首先是创建,然后就是初始化,最简单的一种情况就是,我们一个类可能有多个构造函数,但是方法名称都是一样的,这样职能根据参数类型或者数量来区分它们之间的区别,如果使用工厂模式就可以在工厂类中声明不同的工厂方法,每个工厂方式对应产品的一种构造函数,并进行清晰的命名,这样就增加了代码的可读性。

还有就是可能复杂对象的生产需要读写一些配置文件进行初始化,这个过程可能比较复杂,我们可以把复杂的初始化过程放在工厂函数中,这样使用者不需要关心对象复杂的创建过程,减轻代码的阅读困难。

在学习设计模式的过程中,或者说在学习任何知识的过程中都不要忘记思索,联想,把各个设计模式穿插在一起,这样会加深你对设计模式的理解,比如我们学了工厂模式,是否可以结合一些单利模式,采用工厂模式来创建单例模式的对象呢,当然也可以穿插更多的模式,你串的越多掌握的就越好。

你可能感兴趣的:(工厂模式的一点感悟)