欢迎来到天天文库
浏览记录
ID:14461301
大小:93.00 KB
页数:6页
时间:2018-07-28
《软件体系结构与设计模式 策略模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章策略模式策略模式(别名:政策)定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。StrategyPattern(AnotherName:Policy)Defineafamilyofalgorithms,encapsulateeachone,andmaketheminterchangeable.Strategyletsthealgorithmvaryindependentlyfromclientsthatuseit.一、概述策略模式是处理算法的不同变体的一种成熟模式,策略模式通过接口或抽象类封装算法的标
2、识,即在接口中定义一个抽象方法,实现该接口的类将实现接口中的抽象方法。在策略模式中,封装算法标识的接口称作策略,实现该接口的类称作具体二、策略模式的结构与使用策略模式的结构中包括三种角色:•策略(Strategy)•具体策略(ConcreteStrategy)•上下文(Context)•策略模式的UML类图•策略模式的结构的描述与使用在某种比赛中有若干个裁判,每位裁判给选手一个得分。选手的最后得分是根据全体裁判的得分计算出来的。请给出几种计算选手得分的评分方案,对于某次比赛,可以从你的方案中选择一种方案作为本次比赛的评分方案。•1.策略(Strategy):
3、Computable.javapublicinterfaceComputableStrategy{publicabstractdoublecomputeScore(double[]a);}2.具体策略(ConcreteStrategy):StrategyOne.java(代数平均值方法)publicclassStrategyOneimplementsComputableStrategy{publicdoublecomputeScore(double[]a){doublescore=0,sum=0;for(inti=0;i4、sum+a[i];}score=sum/a.length;returnscore;}}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=5、1;i6、urnstrategy.computeScore(a);elsereturn0;}}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}7、;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",li8、.getName(),li.getScore());
4、sum+a[i];}score=sum/a.length;returnscore;}}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=
5、1;i6、urnstrategy.computeScore(a);elsereturn0;}}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}7、;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",li8、.getName(),li.getScore());
6、urnstrategy.computeScore(a);elsereturn0;}}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}
7、;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
8、.getName(),li.getScore());
此文档下载收益归作者所有