网站大量收购独家精品文档,联系QQ:2885784924

3-抽象工厂模式.doc

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

意图 提供一个创建一系列相关活相互依赖对象的接口,而无需指定他们具体的类。(G4) 任务 假设我们需要进行各种数据库操作,可是我们有很多的选择啊,JDBC,Hibernate,Ibatis等等。本来选择一个就OK了,可是变态的Boss为了炫耀我们的技术如何如何强大,竟说我们能够无成本地在这三个解决方案间切换。这下系统该怎么设计呢? 或许你已经注意到每种解决方案自身都是完备而独立的,不错,这便是解决问题的切入点。提供一套解决方案公有行为的接口,各个解决方案分别实现这些接口,同时建立一个创建各个解决方案的工厂(Factory)。这不就完成任务了吗?哈哈。 首先我们从使用者的角度出发,总结出一套数据库操作的方法,在这里我们称为Service。假设我们只需要一个行为,就是work(),内容是打印出这是来自哪个解决方案。 java 代码 ? /**? ?*?业务类接口?? ?*/?? public?interface?Service?{?? ????/**? ?????*?运行业务? ?????*/?? ????void?work();?? }?? 然后我们根据这个接口分别实现各个解决方案的相应实现。 java 代码 ? /**? ?*?A体系中的业务实现 ?*/?? public?class?ServiceA?implements?Service?{?? ?? ????public?void?work()?{?? ????????System.out.println(这是A体系中业务。);?? ????}?? }?? java 代码 ? /**? ?*?B体系中的业务实现 ?*/?? public?class?ServiceB?implements?Service?{?? ??? ????public?void?work()?{?? ????????System.out.println(这是B体系中业务。);?? ????}?? }?? 大概各位都碰到过需求不断变更,Service不断增加的情况吧。只有一个Service可不够用啊,保不准等会儿Boss就调研回来,需要新增加一个Service2,Service3......ServiceN。如果都写到Service接口里,那可是变成巨无霸了。汉堡包巨无霸我喜欢,代码巨无霸我可就不喜欢了。于是给这些Service建立一个工厂(Factory),以方便地创建各种Service。 那么我们首先来建立一个Factory的接口类。 java 代码 ? /**? ?*??工厂接口 ?*/?? public?interface?Factory?{?? ????/**? ?????*?建立创建Service的抽象接口,由各实现的工厂来创建具体的Service? ?????*/?? ?????Service?createService();?? }?? 下面就来实现各个解决方案的工厂。 java 代码 ? /**? ?*?具体的实现工厂A? ?*/?? public?class?FactoryA implements Factory?{?? ?? ????public?Service?createService()?{?? ????????//?创建本体系中的Service实现?? ????????return?new?ServiceA();?? ????}?? }?? java 代码 ? /**? ?*?具体的实现工厂B ?*/?? public?class?FactoryB implements Factory?{??? ???? ????public?Service?createService()?{?? ????????//?创建本体系中的Service实现?? ????????return?new?ServiceB();?? ????}?? }?? 或许各位看官会说这不就是工厂模式嘛,怎么又在前面加上“抽象”二字,难不成是故弄玄虚?非也非也。前头说过了,我们解决问题的切入点是“每种解决方案自身都是完备而独立的”,所以这些具体的各种解决方案的工厂对Consumer也应该是透明的。于是我们给这些工厂(解决方案)加上一个工厂,也就是我们通过这个工厂来生成一整套的解决方案。这个工厂便是我们要说的AbstractFactory。 java 代码 ? /**? ?*??抽象工厂 ?*/?? public??class?AbstractFactory?{?? ????/**? ?????*?根据不同的体系要求创建出不同的业务工厂? ?????*?? ?????*?@para

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档