系统架构技能之设计模式—工厂模式

  一、开篇

  本文主要是讲述设计模式中最经典的创建型模式-工厂模式,本文将会从以下几点对工厂模式进行阐述。        image  本文将会从上面的四个方面进行详细的讲解和说明,当然会的朋友可以之处我的不足之处,不会的朋友也请我们能够相互学习讨论。

  二、摘要

  本文将会主要是结合项目中的一些实例作为实例来分析工程模式的使用方式和何时使用工程模式,并且分析工程模式的有点和它解决的问题,在我们实际的项目中何时能使用到它,或者说我们在什么情况下,应该考虑使用工厂模式来解决项目中的问题,一般情况下我们可以这样理解设计模式,设计模式是一种方案,为我们遇到与设计模式提出的应用场景想象或者相仿的场景中,这类问题通常是经常发生或者是经常遇到的问题的通用解决方案。

  本文依然是采用图文讲解的形式来分析工程模式在项目中出现的位置,并且给出几个灵活的实现方案。主要针对的实现方式有:通过配置文件,通过类型,通过委托,通过特性等来实现工厂。

  三、本文大纲

       a、开篇。

       b、摘要。

       c、本文大纲。

       d、工厂模式的特点及使用场景。

       e、工厂模式的实现方案。

       f、工厂模式使用总结。

       g、系列进度。

       h、下篇预告。

  四、工厂模式的特点及使用场景

  4.1、工厂模式简介

  工厂模式是创建型模式中最典型的模式,主要是用来创建对象,减少我们在使用某个对象时的new() 操作,我相信大家都有这样的困惑,目前我所在的项目都在程序开发的过程中,还是有很多的new()操作出现在表现层中,并没有通过工厂来创建对象,一方面可能是因为我们自身比较懒,不规范项目的编码形式,另外一方面也是由于项目的进度比较紧,没有那么多的时间去完成工厂的统一创建,当然对于这样的动态创建对象的工厂,推荐的做法还是我们后面会讲到的创建型模式--《抽象工厂模式》来解决吧。

  如果您并不知道工厂模式是用来干什么的,我们可以通过如下举例来说明,例如我们现在有个矿泉水加工厂,加工矿泉水,我们现在知道有矿泉水这个对象,那么当我批量生产矿泉水的时候,我们就通过工厂来批量的生产,等于我们程序中的批量创建对象。这时候我有很多个对象,也就是很多游客,他们每人都要一瓶矿泉水,这时候如果说把游客比作不同的应用程序模块,都要使用矿泉水这个对象,那么我是不是应该每个应用程序都在使用这个对象的时候,我使用new()操作呢?,无疑这不是一个好的方案。我们来看看图形化的描述吧?

image  这种情况下,不同的游客需要矿泉水的时候,我就new()一个矿泉水和我找个加工厂生产矿泉水明显是有差别的,这个时候,游客不应该和矿泉水有关联关系了,而且游客不知道,矿泉水是怎么生产出来的,也不需要关心这些东西。

  那么我们应该如何去解决这样的问题呢?基于面向对象的变成设计时,原则就是低耦合,对象和对象之间。那么对象之间的引用关系,可以通过抽象出接口,通过借口的依赖来解耦,降低系统的耦合性。        image  假如这个时候我修改对象服务的名称,那么我是不是必须把所有的调用这个对象服务应用程序代码都进行修改?这个是必须的,否则程序无法编译通过的。但是如果我们使用工厂模式的时候呢?有什么不同呢?我们来看看:        image  上面是添加了工厂模式之后的情况,上面就算是你修改了类名之后,只需要修改工厂中的New出来的类即可,当然如果你要是通过返回接口的形式的话,再不修改接口命名的前提下,如何修改类方法都是可行的,并且通过工厂模式,无疑降低了应用程序与对象之间的耦合性,通过工厂来解耦,提供程序的应对变化的适应能力。

  4.2、工厂模式的使用场景

  工厂模式一般用于创建一类对象,而不用每次在使用时通过new()对象才能使用对象,而是通过工厂来完成对象的创建,这样不但提供了统一创建对象的入口,而且对于程序的可维护和可测试性都有很大的提高。总体来说如下场景使用工厂模式非常合适:

  1、工厂负责创建某一类对象的时候,或者说工厂的职责比较单一时,如果说多个类型的对象时候,用工厂模式就不如使用抽象工厂了

  2、一般比较少的积累对象,可以通过类型的判定创建不同的对象时,也是可以通过工厂模式来完成,例如多数据库的支持,我们在设计数据访问层时,利用简单对象工厂,通过枚举或者配置文件的形式,来动态的创建数据访问层实例。

  3、一般来说类型单一的对象,或者类型比较少的时候,使用工厂模式来创建对象可以解决一类问题。还可以通过一个总的工厂,来创建多个工厂,然后多个工厂负责创建相应的实例,有点类似我们平时说的目录结构似的。

  类似如下的形式,大家一看就明白了:          image  等于是不同层级的工厂,具有不同的职责和任务。

  五、工厂模式的实现方案

  5.1、工厂模式的配置文件实现。

  我们先看配置文件的配置内容:

<DatabaseInfo>
<ConnKey>default</ConnKey>
<DataBaseType>MSSQLServer</DataBaseType>
</DatabaseInfo>

it知识库系统架构技能之设计模式—工厂模式,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。