- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
设计模式是对特定问题经过无数次经验总结后提出的能够解决它的优雅的方案但是,如果
想要真正使设计模式发挥最大作用,仅仅知道设计模式是什么,以及它是如何实现的是很不
够的,因为那样就不能使你对于设计模式有真正的理解,也就不能够在自己的设计中正确、
恰当的使用设计模式。本文试图从另一个角度(设计模式的意图、动机)来看待设计模式,
通过这种新的思路,设计模式会变得非常贴近你的设计过程,并且能够指导、简化你的设计,
最终将会导出一个优秀的解决方案
1、介绍
在进行项目的开发活动中,有一些设计在项目刚刚开始工作的很好,但是随着项目的进展,
发现需要对已有的代码进行修改或者扩展,导致这样做的原因主要有:新的功能需求的需要
以及对系统进一步理解在这个时候,我们往往会发现进行这项工作比较困难,即使能完成
也要付出很大的代价。此时,一个必须要做的工作就是要对现有的代码进行重构
(refactoring),通过重构使得我们接下来的工作变得相对容易
重构就是在不改变软件系统代码的外部行为的前提下,改善它的内部结构重构的目标就是
使代码结构更加合理,富有弹性,能够适应新的需求、新的变化对于特定问题给出优美解
决方案的设计模式往往会成为重构的目标,而且一旦我们能够识别出能够解决我们问题的设
计模式,将会大大简化我们的工作,因为我们可以重用别人已经做过的工作但是在我们的
原始设计和最终可能会适用于我们的设计模式间的过渡并不是平滑的,而是有一个间隙这
样的结果就是:即使我们已经知道了很多的设计模式,面对我们的实际问题,我们也没有一
个有效的方法去判断哪一个设计模式适用于我们的系统,我们应该去怎样应用它
造成上述问题的原因往往是由于过于注重设计模式所给出的解决方案这个结果,而对于设计
模式的意图,以及它产生的动机却忽略了然而,正是设计模式的意图、动机促使人们给出
了一个解决一类问题的方案这个结果,设计模式的动机、意图体现了该模式的形成思路,所
以更加贴近我们的实际问题,从而会有效的指导我们的重构历程本文将通过一个实例来展
示这个过程
在本文中对例子进行了简化,这样做是为了突出问题的实质并且会使我们的思路更加清晰
思路本身才是最重要、最根本的,简化了的例子不会降低我们所展示的思路、方法的适用性
2、问题描述
一个完善的软件系统,必须要对出现的错误进行相应的处理,只有这样才能使系统足够的健
壮,我准备以软件系统中对于错误的处理为例,来展示我所使用的思路、方法
在一个分布式的网管系统中,一个操作往往不会一定成功,常常会因为这样或者那样的原因
失败,此时我们就要根据失败的原因相应的处理,使错误的影响局限在最小的范围内,最好
能够恢复而不影响系统的正常运行,还有一点很重要,那就是在对错误进行处理的同时,一
定不要忘记通知系统的管理者,因为只有管理者才有能力对错误进行进一步的分析,从而查
找出错误的根源,从根本上解决错误
下面我就从错误处理的通告管理者部分入手,开始我们的旅程假定一个在一个分布式环境
中访问数据库的操作,那么就有可能因为通信的原因或者数据库本身的原因失败,此时我们
要通过用户界面来通知管理者发生的错误。简化了的代码示例如下:
/*错误码定义*/
classErrorConstant
{
publicstaticfinalintERROR_DBACCESS=100
publicstaticfinalintERROR_COMMUNICATION=101
}
/*省略了用户界面中的其他的功能*/
classGUISys
{
publicvoidannounceError(interrCode){
switch(errCode){
caseErrorConstant.ERROR_DBACCESS:
/*通告管理者数据库访问错误的发生*/
break
caseErrorConstant.ERROR_COMMUNICATION:
/*通告管理者通信错误的发生*/
break
}
}
}
开始,这段代码工作的很好,能够完成我们需要的功能。但是这段代码缺少相应的弹性,很
难适应需求的变化
3、问题分析
熟悉面向对象的读者很快就会发现上面的代码是典型的结构化的方法,结构化的方法是以具
体的功能为核心来组织程序的结构,它的封装度仅为1级,即仅有对于特定的功能的封装(函
数)。这使得结构化的方法很难适应需求的变化,面向对象的方法正是在这一点上优于结构
化的方法在面向对象领域,是以对象来组成程序结构的,一个对象有自己的职责,通过对
象间的交互来完成系统的功能,这使得它的封装度至少为2级,即封装了为完成
文档评论(0)