设计模式工厂模式_第1页
设计模式工厂模式_第2页
设计模式工厂模式_第3页
设计模式工厂模式_第4页
设计模式工厂模式_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设计模式工厂模式2012.021开闭原则对扩展开放对修改关闭 扩展性稳定性2简单工厂( Simple Factory)提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。3类UML图抽象产品具体产品2具体产品1工厂具体产品2具体产品1产品1实例产品2实例普通实例化简单工厂实例化4简单工厂中的参与者抽象产品工厂创建的所有产品的父类负责描述所有实例所共有的公共接口具体产品工厂创建的目标抽象产品的某个具体实例工厂实现创建所有实例的内部逻辑被外调用,创建需要的产品对象5优缺点优点实现了客户端和具体实现类的解耦为系统结构提供了灵活的动态扩展机制缺点工厂

2、包含了所有的创建逻辑系统扩展困难,一旦添加新产品就不得不修改工厂逻辑(通过反射解决)不方便扩展子工厂。通常使用静态工厂方法,这使得无法由子类继承6什么时候选择简单工厂要完全封装,隔离具体实现选用简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实现。为系统结构提供了灵活的动态扩展机制集中管理和控制对外创建对象的职责简单工厂可以创建很多的、不相关的对象,可以把对外创建对象的职责集中到一个简单工厂来,从而实现集中管理和控制。7工厂方法(Factory Method )定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色

3、,仅负责具体工厂子类必须实现的接口。8类UML图抽象产品具体产品2具体产品1抽象工厂具体工厂2具体工厂19工厂方法中的参与者抽象产品所有产品的父类,描述所有实例所共有的公共接口具体产品工厂创建的目标,抽象产品的某个具体实例抽象工厂工厂方法模式的核心,任何在模式中创建的对象的工厂类必须实现这个接口具体工厂实现抽象工厂接口,实现创建所有实例的内部逻辑。被外调用,创建需要的产品对象10优缺点优点克服了简单工厂模式违背开放封闭原则的缺点,又保持了封装对象创建过程的优点,为系统结构提供了灵活的动态扩展机制缺点每增加一个产品,就需要增加一个产品工厂的类,增加了额外的开发量11什么时候选择工厂方法如果一个类

4、需要创建某个接口的对象,但是又不知道具体的实现,这种情况可以选用工厂方法模式,把创建对象的工作延迟到子类去实现如果一个类本身就希望,由它的子类来创建所需的对象的时候,应该使用工厂方法模式12抽象工厂(Abstract Factory)当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。13类UML图抽象产品1具体产品2具体产品1抽象工厂具体工厂2具体工厂1抽象产品214抽象工厂中的参与者抽象产品多个有相关联系的产品的接口具体产品工厂创建的目标,抽象产品的某个具体实例抽象工厂工厂方法模式的核心,任何在模式中创建的对象的工厂类必须实现这个接口具体工厂实现抽象工厂接口,实现创建所有实例的内部逻辑。被外调用,创建需要的产品对象15优缺点优点分离了具体的类。使得易于交换产品系列有利于产品的一致性缺点难以扩展抽象工厂以生产新种类的产品。 抽象工厂几口确定了可以被创建的产品集合,支持新种类的产品就需要扩展该工厂接口,这将涉及抽象工厂类及其所有子类的改变。16什么时候选择抽象工厂一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。这个系统有多于一个的产品族,而系统只消费其中某一产品族。同属于同一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论