研磨设计模式之 工厂方法模式

上传人:pu****.1 文档编号:508331547 上传时间:2023-09-04 格式:DOCX 页数:48 大小:187.62KB
返回 下载 相关 举报
研磨设计模式之 工厂方法模式_第1页
第1页 / 共48页
研磨设计模式之 工厂方法模式_第2页
第2页 / 共48页
研磨设计模式之 工厂方法模式_第3页
第3页 / 共48页
研磨设计模式之 工厂方法模式_第4页
第4页 / 共48页
研磨设计模式之 工厂方法模式_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《研磨设计模式之 工厂方法模式》由会员分享,可在线阅读,更多相关《研磨设计模式之 工厂方法模式(48页珍藏版)》请在金锄头文库上搜索。

1、研磨设计模式之 工厂方法模式-1 做Java一晃就十年了,最近手痒痒,也决定跟随一下潮流,整个博客,写点东西,就算对自己的知识进行一个梳理和总结,也跟朋友们交流交流,希望能坚持下去。 先写写设计模式方面的内容吧,就是GoF的23个模式,先从大家最熟悉的工厂方法模式开始,这个最简单,明白的人多,看看是否能写出点跟别人不一样的东西,欢迎大家来热烈讨论,提出建议或意见,并进行批评指正,一概虚心接受,在此先谢过了! 另外,大家也可以说说最想看到哪个模式,那我就先写它,呵呵,大家感兴趣,我才会有动力写下去!好了,言归正传,Now Go!工厂方法模式(Factory Method)1 场景景问题1.1 导

2、出数数据的应应用框架架 考虑这这样一个个实际应应用:实实现一个个导出数数据的应应用框架架,来让让客户选选择数据据的导出出方式,并并真正执执行数据据导出。 在一些实际的企业应用中,一个公司的系统往往分散在很多个不同的地方运行,比如各个分公司或者是门市点,公司没有建立全公司专网的实力,但是又不愿意让业务数据实时的在广域网上传递,一个是考虑数据安全的问题,一个是运行速度的问题。 这种系统通常会有一个折中的方案,那就是各个分公司内运行系统的时候是独立的,是在自己分公司的局域网内运行。然后在每天业务结束的时候,各个分公司会导出自己的业务数据,然后把业务数据打包通过网络传送给总公司,或是专人把数据送到总公

3、司,然后由总公司进行数据导入和核算。 通常这种系统,在导出数据上,会有一些约定的方式,比如导出成:文本格式、数据库备份形式、Excel格式、Xml格式等等。 现在就来考虑实现这样一个应用框架。在继续之前,先来了解一些关于框架的知识。1.2 框架的的基础知知识(1):框框架是什什么 简单点点说:框框架就是是能完成成一定功功能的半半成品软软件。 就就其本质质而言,框框架是一一个软件件,而且且是一个个半成品品的软件件。所谓谓半成品品,就是是还不能能完全实实现用户户需要的的功能,框框架只是是实现用用户需要要的功能能的一部部分,还还需要进进一步加加工,才才能成为为一个满满足用户户需要的的、完整整的软件件

4、。因此此框架级级的软件件,它的的主要客客户是开开发人员员,而不不是最终终用户。 有些朋友会想,既然框架只是个半成品,那何必要去学习和使用框架呢?学习成本也不算小,那就是因为框架能完成一定的功能,也就是这“框架已经完成的一定的功能”在吸引着开发人员,让大家投入去学习和使用框架。(2):框框架能干干什么 能完完成一定定功能,加加快应用用开发进进度 由于框框架完成成了一定定的功能能,而且且通常是是一些基基础的、有有难度的的、通用用的功能能,这就就避免我我们在应应用开发发的时候候完全从从头开始始,而是是在框架架已有的的功能之之上继续续开发,也也就是说说会复用用框架的的功能,从从而加快快应用的的开发进进

5、度。 给我我们一个个精良的的程序架架构 框架定定义了应应用的整整体结构构,包括括类和对对象的分分割,各各部分的的主要责责任,类类和对象象怎么协协作,以以及控制制流程等等等。现现在Jaava界界大多数数流行的的框架,大大都出自自大师手手笔,设设计都很很精良。基基于这样样的框架架来开发发,一般般会遵循循框架已已经规划划好的结结构来进进行开发发,从而而让我们们开发的的应用程程序的结结构也相相对变得得精良了了。(3):对对框架的的理解 基于于框架来来开发,事事情还是是那些事事情,只只是看谁谁做的问问题 对于应应用程序序和框架架的关系系,可以以用一个个图来简简单描述述一下,如如图1所所示:图1 应用程程

6、序和框框架的简简单关系系示意图图 如果没没有框架架,那么么客户要要求的所所有功能能都由开开发人员员自己来来开发,没没问题,同同样可以以实现用用户要求求的功能能,只是是开发人人员的工工作多点点。 如果有有了框架架,框架架本身完完成了一一定的功功能,那那么框架架已有的的功能,开开发人员员就可以以不做了了,开发发人员只只需要完完成框架架没有的的功能,最最后同样样是完成成客户要要求的所所有功能能,但是是开发人人员的工工作就减减少了。 也就是说,基于框架来开发,软件要完成的功能并没有变化,还是客户要求的所有功能,也就是“事情还是那些事情”的意思。但是有了框架过后,框架完成了一部分功能,然后开发人员再完成

7、一部分功能,最后由框架和开发人员合起来完成了整个软件的功能,也就是看这些功能“由谁做”的问题。 基于于框架开开发,可可以不去去做框架架所做的的事情,但但是应该该明白框框架在干干什么,以以及框架架是如何何实现相相应功能能的 事实上上,在实实际开发发中,应应用程序序和框架架的关系系,通常常都不会会如上面面讲述的的那样,分分得那么么清楚,更更为普遍遍的是相相互交互互的,也也就是应应用程序序做一部部分工作作,然后后框架做做一部分分工作,然然后应用用程序再再做一部部分工作作,然后后框架再再做一部部分工作作,如此此交错,最最后由应应用程序序和框架架组合起起来完成成用户的的功能要要求。 也用用个图来来说明,

8、如如图2所所示: 图22 应应用程序序和框架架的关系系示意图图 如果把把这个由由应用程程序和框框架组合合在一起起构成的的矩形,当当作最后后完成的的软件。试试想一下下,如果果你不懂懂框架在在干什么么的话,相相当于框框架对你你来讲是是个黑盒盒,也就就是相当当于在上上面图22中,去去掉框架架的两块块,会发发现什么么?没错错,剩下下的应用用程序是是支离破破碎的,是是相互分分隔开来来的。 这会会导致一一个非常常致命的的问题,整整个应用用是如何何运转起起来的,你你是不清清楚的,也也就是说说对你而而言,项项目已经经失控了了,从项项目管理理的角度度来讲,这这是很危危险的。 因此,在基于框架开发的时候,虽然我们

9、可以不去做框架所做的事情,但是应该搞明白框架在干什么,如果条件许可的话,还应该搞清楚框架是如何实现相应功能的,至少应该把大致的实现思路和实现步骤搞清楚,这样我们才能整体的掌控整个项目,才能尽量减少出现项目失控的情况。(4):框框架和设设计模式式的关系系 设设计模式式比框架架更抽象象 框架架已经是是实现出出来的软软件了,虽虽然只是是个半成成品的软软件,但但毕竟是是已经实实现出来来的了。而而设计模模式的重重心还在在于解决决问题的的方案上上,也就就是还停停留在思思想的层层面。因因此设计计模式比比框架更更为抽象象。 设设计模式式是比框框架更小小的体系系结构元元素 如如上所述述,框架架是已经经实现出出来

10、的软软件,并并实现了了一系列列的功能能,因此此一个框框架,通通常会包包含多个个设计模模式的应应用。 框架比比设计模模式更加加特例化化 框架架是完成成一定功功能的半半成品软软件,也也就是说说,框架架的目的的很明确确,就是是要解决决某一个个领域的的某些问问题,那那是很具具体的功功能,不不同的领领域实现现出来的的框架是是不一样样的。 而而设计模模式还停停留在思思想的层层面,在在不同的的领域都都可以应应用,只只要相应应的问题题适合用用某个设设计模式式来解决决。因此此框架总总是针对对特定领领域的,而而设计模模式更加加注重从从思想上上,从方方法上来来解决问问题,更更加通用用化。1.3 有何问问题 分分析上

11、面面要实现现的应用用框架,不不管用户户选择什什么样的的导出格格式,最最后导出出的都是是一个文文件,而而且系统统并不知知道究竟竟要导出出成为什什么样的的文件,因因此应该该有一个个统一的的接口,来来描述系系统最后后生成的的对象,并并操作输输出的文文件。 先把导导出的文文件对象象的接口口定义出出来,示示例代码码如下:/* 导出出的文件件对象的的接口*/publiic iinteerfaace ExpporttFilleAppi /* * 导导出内容容成为文文件 * parram datta 示示意:需需要保存存的数据据 * retturnn 是否否导出成成功 */ ppubllic boooleaa

12、n eexpoort(Strringg daata); 对于实实现导出出数据的的业务功功能对象象,它应应该根据据需要来来创建相相应的EExpoortFFileeApii的实现现对象,因因为特定定的ExxporrtFiileAApi的的实现是是与具体体的业务务相关的的。但是是对于实实现导出出数据的的业务功功能对象象而言,它它并不知知道应该该创建哪哪一个EExpoortFFileeApii的实现现对象,也也不知道道如何创创建。 也就就是说:对于实实现导出出数据的的业务功功能对象象,它需需要创建建ExpporttFilleAppi的具具体实例例对象,但但是它只只知道EExpoortFFileeApi

13、i接口,而而不知道道其具体体的实现现。那该该怎么办办呢?研磨设计模模式之 工厂方方法模式式-22 解解决方案案2.1 工厂方方法模式式来解决决 用来解解决上述述问题的的一个合合理的解解决方案案就是工工厂方法法模式。那那么什么么是工厂厂方法模模式呢?(1)工工厂方法法模式定定义 定义一一个用于于创建对对象的接接口,让让子类决决定实例例化哪一一个类,FFacttoryy Meethood使一一个类的的实例化化延迟到到其子类类。(2)应用用工厂方方法模式式来解决决的思路路 仔仔细分析析上面的的问题,事事实上在在实现导导出数据据的业务务功能对对象里面面,根本本就不知知道究竟竟要使用用哪一种种导出文文件

14、的格格式,因因此这个个对象本本就不应应该和具具体的导导出文件件的对象象耦合在在一起,它它只需要要面向导导出的文文件对象象的接口口就好了了。 但是这这样一来来,又有有新的问问题产生生了:接接口是不不能直接接使用的的,需要要使用具具体的接接口实现现对象的的实例。 这不是自相矛盾吗?要求面向接口,不让和具体的实现耦合,但是又需要创建接口的具体实现对象的实例。怎么解决这个矛盾呢? 工厂方法模式的解决思路很有意思,那就是不解决,采取无为而治的方式:不是需要接口对象吗,那就定义一个方法来创建;可是事实上它自己是不知道如何创建这个接口对象的,没有关系,那就定义成抽象方法就好了,自己实现不了,那就让子类来实现,这样这个对象本身就可以只是面向接口编程,而无需关心到底如何创建接口对象了。2.2 模式结结构和说说明 工厂方方法模式式的结构构如图33所示: 图3 工厂厂方法模模式结构构示意图图Produuct: 定定义工厂厂方法所所创

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号