- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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实现类,并且当一个系列中实现类有关系时)。
??? 抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。即当遇到需要创建多个系列,并且每一个系列中的类相互依赖时,可以考虑用抽象工厂。
您可能关注的文档
- 第四章 审计抽样-抽样风险.pdf
- 第四章 筹资管理(上)-企业筹资的动机.pdf
- 第四章、对偶(DP)问题.ppt
- 第四章函数逼近.ppt
- 第四单元-数学-江苏科技版.ppt
- 第四章圆与方程小结与复习(学案).doc
- 第四章图与网络1.ppt
- 第8章FIR滤波器和IIR滤波器原理及实现.ppt
- 第四章NoRestriction.pdf
- 第四章绩效管理(学员专用).doc
- DB44_T 2611-2025 城市排水管网有毒有害气体监测与风险分级管理技术标准.pdf
- DB44_T 2612-2025 竞赛类科普活动策划与实施服务规范.pdf
- DB43_T 2947-2024 烟草种子质量控制规程.pdf
- DB37_T 4836-2025 煤矿风量实时监测技术要求.pdf
- 叉车防撞系统,全球前22强生产商排名及市场份额(by QYResearch).docx
- 超滤膜,全球前18强生产商排名及市场份额(by QYResearch).docx
- DB62T 4172-2020 玉米品种 酒623规范.pdf
- DB62T 4160-2020 在用真空绝热深冷压力容器综合性能在线检测方法.pdf
- DB62T 4164-2020 辣椒品种 酒椒1号.pdf
- DB62T 4133-2020 公路隧道地质超前预报机械能无损探测技术规程.pdf
文档评论(0)