软件体系结构与设计模式第七章策略模式.ppt

上传人:max****ui 文档编号:6208306 上传时间:2020-02-19 格式:PPT 页数:23 大小:350.81KB
返回 下载 相关 举报
软件体系结构与设计模式第七章策略模式.ppt_第1页
第1页 / 共23页
软件体系结构与设计模式第七章策略模式.ppt_第2页
第2页 / 共23页
软件体系结构与设计模式第七章策略模式.ppt_第3页
第3页 / 共23页
点击查看更多>>
资源描述
第七章策略模式 2020 2 19 1 策略模式 别名 政策 定义一系列算法 把它们一个个封装起来 并且使它们可相互替换 本模式使得算法可独立于使用它的客户而变化 StrategyPattern AnotherName Policy Defineafamilyofalgorithms encapsulateeachone andmaketheminterchangeable Strategyletsthealgorithmvaryindependentlyfromclientsthatuseit 一 概述 2020 2 19 3 策略模式是处理算法的不同变体的一种成熟模式 策略模式通过接口或抽象类封装算法的标识 即在接口中定义一个抽象方法 实现该接口的类将实现接口中的抽象方法 在策略模式中 封装算法标识的接口称作策略 实现该接口的类称作具体策略 二 策略模式的结构与使用 2020 2 19 4 策略模式的结构中包括三种角色 策略 Strategy 具体策略 ConcreteStrategy 上下文 Context 2020 2 19 5 策略模式的UML类图 商品利益 存款利息计算 利息计算 预想利息方式计算 确定余款方式计算 利益 利息计算 计算 2020 2 19 9 策略模式的结构的描述与使用 在某种比赛中有若干个裁判 每位裁判给选手一个得分 选手的最后得分是根据全体裁判的得分计算出来的 请给出几种计算选手得分的评分方案 对于某次比赛 可以从你的方案中选择一种方案作为本次比赛的评分方案 1 策略 Strategy Computable javapublicinterfaceComputableStrategy publicabstractdoublecomputeScore double a 2020 2 19 11 2 具体策略 ConcreteStrategy StrategyOne java 代数平均值方法 publicclassStrategyOneimplementsComputableStrategy publicdoublecomputeScore double a doublescore 0 sum 0 for inti 0 i a length i sum sum a i score sum a length returnscore 2020 2 19 12 2 具体策略 ConcreteStrategy StrategyTwo java 去掉最大值和最小值 然后计算代数平均值 importjava util Arrays publicclassStrategyTwoimplementsComputableStrategy publicdoublecomputeScore double a if a length 2 return0 doublescore 0 sum 0 Arrays sort a for inti 1 i a length 1 i sum sum a i score sum a length 2 returnscore 2020 2 19 13 3 上下文 GymnasticsGame javapublicclassGymnasticsGame ComputableStrategystrategy publicvoidsetStrategy ComputableStrategystrategy this strategy strategy publicdoublegetPersonScore double a if strategy null puteScore a elsereturn0 2020 2 19 14 4 应用 Application java 1publicclassApplication publicstaticvoidmain Stringargs GymnasticsGamegame newGymnasticsGame game setStrategy newStrategyOne Personzhang newPerson zhang setName 张三 double a 9 12 9 25 8 87 9 99 6 99 7 88 Personli newPerson li setName 李四 double b 9 15 9 26 8 97 9 89 6 97 7 89 zhang setScore game getPersonScore a li setScore game getPersonScore b System out println 使用算术平均值方案 System out println 得分 zhang getName zhang getScore System out println 得分 5 3f n li getName li getScore 2020 2 19 15 4 应用 Application java 2classPerson Stringname doublescore publicvoidsetScore doublet score t publicvoidsetName Strings name s publicdoublegetScore returnscore publicStringgetName returnname 三 策略模式的优点 2020 2 19 16 上下文 Context 和具体策略 ConcreteStrategy 是松耦合关系 因此上下文只知道它要使用某一个实现Strategy接口类的实例 但不需要知道具体是哪一个类 策略模式满足 开 闭原则 当增加新的具体策略时 不需要修改上下文类的代码 上下文就可以引用新的具体策略的实例 四 适合使用策略模式的情景 一个类定义了多种行为 并且这些行为在这个类中以多个条件语句的形式出现 可以使用策略模式避免在类中使用大量的条件语句 程序不需要暴露复杂的 与算法相关的数据结构 可以使用策略模式封装算法 需要使用一个算法的不同变体 五 例二 把数组导出为表格的算法 输入一个数组 导出一个表格 当用户想改变导出的表格时 便可以通过改变输出的算法改变输出的结果 如果输出的内容用以网页显示 则输出JackMayaMikesShadow如果输出的结果用以直接的屏幕输出 则可以输出 Jack Maya Mikes Shadow publicinterfaceTableExporter publicStringgetExported String data publicclassHtmlExporterimplementsTableExporter publicStringgetExported String data if data null return StringBuffersb newStringBuffer sb append for inti 0 i data i sb append returnsb toString publicclassLineExporterimplementsTableExporter publicStringgetExported String data if data null return StringBuffertop newStringBuffer StringBuffermid newStringBuffer for inti 0 i data length i Stringstr data i for intj 0 j str length j top append mid append str top append mid append top append n mid append n returntop toString mid toString top toString publicclassClient publicstaticvoidmain String args String data newString Jack Maya Mikes Shadow TableExportertb tb newHtmlExporter System out println tb getExported data tb newLineExporter System out println tb getExported data
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!