简单工厂、工厂方法、抽象工厂比较.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简单工厂、工厂方法、抽象工厂比较

??? 这三个模式主要的应用场景是:当创建单个(简单工厂、工厂方法)或多个(抽象工厂)系列对象,客户程序为了生成某个具体对象判断复杂,可能多处使用,并且在添加新的实现或新的系列时,需要过多改动已有的客户代码,为了解决这些问题,出现了这三种套路。(篇幅有限就不贴代码了) ??? 首先,简单工厂: ??? 在简单工厂中(应对于生成单系列的对象),客户程序仅依赖于Factory和Product类,而不依赖于具体的实现类,CreateProduct方法用于根据传入的参数,生成不同的对象,实际上就是将客户程序中对生成不同实现对象的重构,将创建对象的方法,封装到一个方法中,在这里我们封装成一个工厂类,将生成不同对象的判断逻辑放到一个单独的类中。 ??? 然后,是工厂方法,在简单工厂中,如果需要添加新的一种实现,那就要改过工厂类的方法,这样工厂类就违背了对修改关闭、对扩展开放的原则。在某些情况下,我们的框架无法修改具体创建的工厂类。例如,ADO.NET数据访问程序,sql server组件方式的实现与my sql组件的实现,当my sql实现时,不可能要求MS为它加一个判断分支吧(当然这种情况是不存在的了),我们这里先将这个应用场景看成是单系列,那我们现有的解决方案是简单工厂,而简单工厂缺点是把生成对象判断的逻辑放在了组件中。当我们开的组件要求可以让第三方实现新的实现时,显然这种方式是不可取的。而工厂方法可以解决这一问题 。 ??? 工厂方法(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 ??? 最后,抽象工厂,还是上面ADO.NET数据访问组件的实现例子,在实现各种访问组件时,不可能只有一个类吧,最少也要大于20个类吧,对于这种多系列对象创建工作工厂方法显然不然正常的工作(如果每一个系列有20个类,那么就会有20个抽象类,N*20实现类,并且当一个系列中实现类有关系时)。 ??? 抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。即当遇到需要创建多个系列,并且每一个系列中的类相互依赖时,可以考虑用抽象工厂。

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档