为什么需要工厂?
有两大原因:一是将创建者和使用者解耦,二是提高内聚度。
概念上相似的对象从使用的视角来看,可以以同样的方式处理。然而,创建对象时,负责创建的实体通常需要了解创建的是哪个具体对象,以及何时创建这个而非那个对象。OO告诉我们,让客户对象在概念层次上使用其他对象是最有用的,这意味着设计要遵循开闭原则、依赖倒置原则和Liskov替换原则。要实现这些原则,客户对象就不应知道它所使用的到底是哪一个具体对象。因此,需要有实体来专门负责此事——工厂出现了。
如果让对象的使用者负责实例化该对象,那么代码将会变得复杂。它必须了解许多事情:要创建哪些对象,需要哪些构造参数,构造之后如何使用对象——甚至还包括如何管理一个对象池。将使用和创建分开,将有效提高两部分的内聚度。
什么是工厂
工厂是专门用于实例化其他对象的方法(静态或非静态)、对象或者其他任何实体。工厂可以是专门的对象,也可以是被创建对象自己封装的工厂方法。与工厂有关的经典设计模式有:
Abstract factory
Builder
Factory method
Prototype
Singleton(单线程环境)/doule-checked locking(多线程环境)
Object pool
工厂的职责
1、创建对象。
2、按照预定规则管理对象。比如需创建对象的数量,如何共享对象。
工厂设计准则
先考虑系统中需要什么,然后再去关注如何创建系统。也就是说,我们应该在确定了对象是什么之后再定义工厂。
也可以如下描述:
对象应该要么构造或管理其他对象,要么使用其他对象,而不应该兼而有之。
客户对象与被使用的对象是解耦的,它们不知道被使用对象的具体类型,这些工作是由工厂负责的。另一方面,工厂只知道它们在创建和管理哪些对象,而无需知道这些对象如何使用。
这种分离将带来如下好处:
1、既加强了内聚性,又降低了耦合度。
2、封装了对象的创建过程,具体类对客户对象完全隐藏了。添加新实现或者删除已有实现,都不会改变客户对象。有助于遵循开闭原则。
3、简化测试。客户对象的行为方式和具体实现类无关,这样就无需测试客户对象和具体实现类的所有组合,只需要单独测试各个部分即可。
设计步骤
将开发分为三步:
1、根据所履行的职责找出对象。这时共性和可变性分析极为有用。
2、决定如何使用这些对象。主要是考虑对象间关系,这正是诸多行为型和结构型模式要解决的问题。
3、决定如何管理这些对象,这是工厂的用武之地。
步骤2中生成的代码无需操心哪个对象应该实例化,步骤3的代码则无需操心对象的协作方式。两个步骤的代码内聚性都更好。
添加新功能步骤
1、重构关注点上不符合开闭原则的部分,使之符合开闭原则,并区分出使用者和工厂。
2、编写实现新功能的类。
3、修改管理这些对象的工厂。
工厂和其他模式的结合
模式的结合总是能带来更强大的能力。除了已经well-known的各种工厂之外,可以将行为型和结构型模式组合到工厂中,使得对象创建过程更加灵活,比如可以有使用bridge、decorator或者chain-of-responsibility的工厂。
最后,设计模式在编程实践中都只是指导性的意见。工厂有上面说的那些好处,并不意味着我们一上来就必须用工厂。情况较简单,或者暂时还没有预见到变化的地方,就没有必要用工厂。随着系统越来越复杂,才逐步出现工厂方法,直到专门的工厂对象。
转自
http://blog.csdn.net/liudows/article/details/7615968
分享到:
相关推荐
Java设计模式学习笔记
设计模式总结笔设计模式总结笔记 设计模式总结笔记 设计模式总结笔记 设计模式总结笔记 设计模式总结笔记 记
设计模式1,包含了设计模式的基本介绍,以及状态机模式的读书笔记
共150讲,时长共 33...1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括...
设计模式学习笔记(一)--简单工厂模式源码和类图
阅读《设计模式解析》第2版 后的学习笔记
设计模式学习笔记,这里面详细的记录我学习23三种设计模式的详细过程以及实例代码哦哦
设计模式学习笔记,分析了GOF的23种模式和类设计的原则
工厂设计模式工厂设计模式工厂设计模式工厂设计模式工厂设计模式工厂设计模式工厂设计模式工厂设计模式工厂设计模式
移动应用 UI 设计, 读书笔记, 记录摘取书籍中重点信息,有助于页面设计,原型设计等
HeadFirst设计模式学习笔记比较全面详细地讲解了13个设计模式,有利于大家更好的学习HeadFirst设计模式,希望亲们会喜欢~~~
我收集的设计模式的学习笔记,采用pdf格式,便于收藏和查看
学习Java设计模式的笔记,标注了其中重要的要点,如果有需要的小伙伴,自行下载哦
面向对象与设计模式基础笔记,介绍了面相对象基础和几种设计模式。
各个模式都有详细的例子C#学习笔记,打开就知道了
Head First 设计模式学习笔记。更多内容请参见文章内容。
设计模式笔记
设计模式学习笔记,总共23个设计模式,还有几个设计原则
总结了java开发中的21种设计模式,详解和例子,带书签的pdf格式,方便阅读!
1.1 《Head First设计模式》阅读笔记.第一章 1.2 《Head First设计模式》阅读笔记.第二章 1.3 《Head First设计模式》阅读笔记.第三章 1.4 《Head First设计模式》阅读笔记.第四章 1.5 《Head First设计模式》...