- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 法律伴我成长主题班会.doc
- 腹腔镜下器官保留功能重建手术陈湘教授.ppt
- 倾听怀仁的早晨.doc
- 组织胚胎学论述题.doc
- 什么让人觉得幸福.doc
- 万芸芸征文爱 与 严 同 行.doc
- DMIS系统车站分机安装测试大纲.doc
- 发展教育科学.ppt
- 天然气门站工艺管道安装技术.pdf
- 关于大学生用手机的调查报告.doc
- 2025届北京市东城区高三下学期综合练习(一)语文试卷+评分标准课件 5题.pptx
- 2025届北京市东城区高三下学期综合练习(一)语文试卷+评分标准课件 10题.pptx
- 宗许宁船舶管理电子电气员课件.pptx
- 宗许宁船舶管理电子电气员95课件.pptx
- 2025届北京市东城区高三下学期综合练习(一)语文试卷+评分标准课件 14题.pptx
- 09 xxx系统用工作报告汇报材料.pdf
- 智能网联汽车概论项目一汽车空调系统检查48课件.pptx
- 宗许宁船舶管理电子电气员92课件.pptx
- 2025届北京市东城区高三下学期综合练习(一)语文试卷+评分标准课件 20(2)题.pptx
- 智能网联汽车概论项目一汽车空调系统检查47课件.pptx
文档评论(0)