




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第23讲:Strategy 策略模式2006.9.25 李建忠算法与对象的耦合对象可能经常需要使用多种不同的算法,但是如果变化频繁,会将类型变得脆弱动机(Motivation)在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?意图(Intent)定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。设计模式GoF例说Strategy模式应用这个程序有两个可能的变化点:当枚举类型增加时,即处理的方法增加,那么Process函数需要修改补充一个if else分支;当我们想对分支1的处理ProcessA进行更改时,也要对Process函数进行修改。针对上面的问题,我们首先想到的是把ProcessA写成受保护的虚函数(在OO中我们一般把虚函数都写成受保护的函数,因为它是能改变类的行为的函数,一般情况下只应该作为子类和父类之间的协议出现)。Strategy模式的设计把Cart类和ProcessStrategy类作为对象组合的方式使用。IProcessStrategy表达的是一个算法抽象。抽象和具体算法客户程序这样算法就可以动态地去改变了,我们动态地去new一组具体的Process算法,然后提供给Cart类使用。delegate只要符合参数和返回值,不管是静态方法或者是抽象方法,就可以动态地挂上。但是接口需要抽象含义一致,因此对于这个模式更推荐使用接口来表达抽象的算法。结构(Structure)算法并不是孤立的,它通常都需要有一些上下文去调用它,或者是传入一些参数。Strategy类型里面不携带状态信息(这是与模板方法的区别,模板方法本身是携带状态信息的),我们不能把它看成一种实例,即使有状态,也是会通过参数传入。一个Strategy定义了一个算法的完整步骤和结构,只要用一个Strategy具体类,就可以完成整个算法的操作,不会有其它依赖和耦合。Context和Strategy是一个对象组合的使用关系。Strategy中的抽象接口随时可以替换成具体的类,达到在不同算法之间动态地切换。这个模式的核心是通过对象组合的方式把本来直接调用的内容委托给接口实体对象来完成,至于接口实体对象具体是什么,在运行时才知道,即是运行时改变。Strategy模式的几个要点Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需要在各个算法之间进行切换,所谓封装算法,支持算法的变化。Strategy模式提供了用条件判断语句以外的另一种选择,消除条件判断语句,就是在解耦合。含有许多条件判断语句的代码通常都需要Strategy模式。与State类似,如果Strategy对象没有实例变量,那么各个上下文可以共享一个Strategy对象,从而节省对象开销。Strategy模式适用的是算法结构中整个算法的改变,而不是算法中某个部分的改变。Template Method方法:执行算法的步骤协议是本身放在抽象类里面的,允许一个通用的算法操作多个可能实现Strategy模式:执行算法的协议是在具体类,每个具体实现有不同通用算法来做。.NET框架中的Strategy应用例如ArrayList类,Sort方法做不了什么事情,因为Point类不支持排序,没有继承IComparer接口。但如果我们想支持排序,其实Sort方法就是一个Strategy模式,它支持传入一个继承IComparer接口的具体类。IComparer接口其实就是Strategy我们上面例子中的IProcessStrategy。我们可以实现一个IComparer接口,然后把具体类传入,这样Sort方法就会按我们定义的排序规则执行了。当我们需要切换排序方法的时候,只需要更改传入Sort的具体比较类即可。Ar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 惠州家具基础知识培训班课件
- 2026届上海外国语大学附属浦东外国语学校化学高一上期中质量跟踪监视试题含解析
- 河北省石家庄市晋州市第一中学2026届化学高二第一学期期末质量检测模拟试题含答案
- 悬架说课课件
- 教师节举办庆典策划方案
- 舞蹈社团新学期工作方案
- 特殊学校课程设置活动方案
- 新学期幼教教学工作方案
- 小学元旦主题班会活动方案(标准模版)
- 融创成本管理岗中国面试题及答案
- 卷尺、直尺、角尺校验规程
- Englishpod-1-365-完美打印版内容
- 高边坡施工监理细则
- 学习适应性测验(AAT)(小学五、六年级)
- GB/T 35051-2018选煤厂洗水闭路循环等级
- 项目三 金属的塑性变形与再结晶
- 2022年重庆市水务资产经营有限公司校园招聘笔试试题及答案解析
- 急诊与灾难医学:昏迷课件
- 垃圾焚烧发电厂项目重点及难点施工方案
- 公路工程质量检验评定jtgf80-1
- 经营者身份证明书
评论
0/150
提交评论