设计模式--工厂模式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2012.02张云波开-闭原则对扩展开放对修改关闭扩展性稳定性简单工厂(SimpleFactory)提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。类UML图抽象产品具体产品2具体产品1工厂具体产品2具体产品1产品1实例产品2实例普通实例化简单工厂实例化简单工厂中的参与者抽象产品工厂创建的所有产品的父类负责描述所有实例所共有的公共接口具体产品工厂创建的目标抽象产品的某个具体实例工厂实现创建所有实例的内部逻辑被外调用,创建需要的产品对象优缺点优点实现了客户端和具体实现类的解耦为系统结构提供了灵活的动态扩展机制缺点工厂包含了所有的创建逻辑系统扩展困难,一旦添加新产品就不得不修改工厂逻辑(通过反射解决)不方便扩展子工厂。通常使用静态工厂方法,这使得无法由子类继承什么时候选择简单工厂要完全封装,隔离具体实现选用简单工厂,让客户端通过工厂来获取相应的接口,而无须关心具体的实现。为系统结构提供了灵活的动态扩展机制集中管理和控制对外创建对象的职责简单工厂可以创建很多的、不相关的对象,可以把对外创建对象的职责集中到一个简单工厂来,从而实现集中管理和控制。工厂方法(FactoryMethod)定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口。类UML图抽象产品具体产品2具体产品1抽象工厂具体工厂2具体工厂1工厂方法中的参与者抽象产品所有产品的父类,描述所有实例所共有的公共接口具体产品工厂创建的目标,抽象产品的某个具体实例抽象工厂工厂方法模式的核心,任何在模式中创建的对象的工厂类必须实现这个接口具体工厂实现抽象工厂接口,实现创建所有实例的内部逻辑。被外调用,创建需要的产品对象优缺点优点克服了简单工厂模式违背开放—封闭原则的缺点,又保持了封装对象创建过程的优点,为系统结构提供了灵活的动态扩展机制缺点每增加一个产品,就需要增加一个产品工厂的类,增加了额外的开发量什么时候选择工厂方法如果一个类需要创建某个接口的对象,但是又不知道具体的实现,这种情况可以选用工厂方法模式,把创建对象的工作延迟到子类去实现如果一个类本身就希望,由它的子类来创建所需的对象的时候,应该使用工厂方法模式抽象工厂(AbstractFactory)当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。类UML图抽象产品1具体产品2具体产品1抽象工厂具体工厂2具体工厂1抽象产品2抽象工厂中的参与者抽象产品多个有相关联系的产品的接口具体产品工厂创建的目标,抽象产品的某个具体实例抽象工厂工厂方法模式的核心,任何在模式中创建的对象的工厂类必须实现这个接口具体工厂实现抽象工厂接口,实现创建所有实例的内部逻辑。被外调用,创建需要的产品对象优缺点优点分离了具体的类。使得易于交换产品系列有利于产品的一致性缺点难以扩展抽象工厂以生产新种类的产品。抽象工厂几口确定了可以被创建的产品集合,支持新种类的产品就需要扩展该工厂接口,这将涉及抽象工厂类及其所有子类的改变。什么时候选择抽象工厂一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。这个系统有多于一个的产品族,而系统只消费其中某一产品族。同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功