一句话

对象生产细节的隐藏,适用工厂模式

解析

前段时间有个笑话,话说马云突然饿了,就对属下说:给我买个肯德基,结果,属下就把肯德基收购了!。以此为例,马云的诉求是肯德基,属下收购了肯德基,马云并没有参与收购的流程。再若马云要买个麦当劳,属下收购了麦当劳,马云依然不用关注收购麦当劳的流程。当然这只是个笑话,为了说明工厂模式的本质是隐藏生产过程,简化使用者获取诉求的流程。

对象生产细节

此时坐在这儿,想象到的可隐藏生产细节的场景有两种:

  1. 同类型(同一父类)的对象存在多个,从客体角度,只需要获取某个对象,而无需关注它定义在哪儿,叫什么名字,有没有兄弟姐妹等等细节。
  2. 某对象构建之后,尚有些与此对象无关、外置业务相关的初始化动作,通过工厂可为不同的业务进行定制,也可以规避散弹式修改的场景。

工厂模式实现

常见的模式有以下几种:

  1. 工厂方法:方法传入对象标识,内部使用条件判断,返回对象;有时会嵌入在客体流程中
  2. 简单工厂:类似工厂方法,但独立成工厂类;内部条件判断形式更丰富,可为映射、文件、数据库等
  3. 工厂模式:一种对象,一个工厂,对象和工厂成对存在
  4. 抽象工厂:一种对象的族,一个工厂,一个工厂可以生产多种对象(个人更倾向于用工厂生产工厂的方式)

工厂的种类、表达形式并不局限于以上,代码存储区、配置文件、数据库、模板等等都能以他们各自的形式来表达。 核心要素在于,客体获取对象的流程简单、无需关注构建细节;工厂内部利用编译期生成代码、动态信息资源化等,满足“开闭原则”的同时,简化构建工厂的流程。