第23章策略模式STRATEGY.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:19 大小:457KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

第23章策略模式STRATEGY.ppt

第23章策略模式STRATEGY.ppt

预览

免费试读已结束,剩余 9 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

现实生活中的例子别名:政策概念策略模式的UML类图策略(Strategy)通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口(策略(算法)抽象)具体策略(ConcreteStrategy)包装了相关的算法或行为。(各种策略(算法)的具体实现)上下文(Context环境)策略的外部封装类,或者说策略的容器类。根据不同策略执行不同的行为。策略由外部环境决定应用举例1.策略(Strategy):Computable.javapublicinterfaceComputableStrategy{publicabstractdoublecomputeScore(double[]a);}2.具体策略(ConcreteStrategy):publicclassStrategyOneimplementsComputableStrategy{publicdoublecomputeScore(double[]a){doublescore=0,sum=0;for(inti=0;i<a.length;i++){sum=sum+a[i];}score=sum/a.length;returnscore;}}2.具体策略(ConcreteStrategy):(去掉最大值和最小值,然后计算代数平均值)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;}}3.上下文publicclassGymnasticsGame{ComputableStrategystrategy;publicvoidsetStrategy(ComputableStrategystrategy){this.strategy=strategy;}publicdoublegetPersonScore(double[]a){if(strategy!=null)returnstrategy.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};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());}}4.应用:Application.java_2classPerson{Stringname;doublescore;publicvoidsetScore(doublet){score=t;}publicvoidsetName(Strings){name=s;}publicdoublegetScore(){returnscore;}publicStringgetName(){returnname;}}定义一组算法,并把其封装到一个对象中。然后在运行时,可以灵活的使用其中的一个算法。java.util.Comparator的compare()javax.servlet.http.HttpServletjavax.servlet.Filter的do