第23章策略模式(STRATEGY).ppt

第23章策略模式(STRATEGY).ppt

第23章 策略模式(STRATEGY) * * 现实生活中的例子 跟不同类型的朋友约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了使朋友开心。 别名:政策 概念理解 策略模式 定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化 概念 策略模式通过接口或抽象类封装算法的标识,即在接口中定义一个抽象方法,实现该接口的类将实现接口中的抽象方法。 策略模式把行为和环境分开。 环境类负责维持和查询行为类,各种算法在具体的策略类中提供。 由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。 策略模式中,封装算法标识的接口称作策略,实现该接口的类称作具体 策略模式的UML类图 策略(Strategy)通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口(策略(算法)抽象) 具体策略(ConcreteStrategy)包装了相关的算法或行为。(各种策略(算法)的具体实现) 上下文(Context环境)?策略的外部封装类,或者说策略的容器类。根据不同策略执行不同的行为。策略由外部环境决定 应用举例 在某种比赛中有若干个裁判,每位裁判给选手一个得分。选手的最后得分是根据全体裁判的得分计算出来的。 请给出几种计算选手得分的评分方案,对于某次比赛,可以从你的方案中选择一种方案作为本次比赛的评分方案。 1.策略(Strategy) : Computable.java public interface ComputableStrategy{ public abstract double computeScore(double [] a); } 2.具体策略(ConcreteStrategy): public class StrategyOne implements ComputableStrategy { public double computeScore(double [] a){ double score=0,sum=0; for(int i=0;ia.length;i++){ sum=sum+a[i]; } score=sum/a.length; return score; } } 2.具体策略(ConcreteStrategy): (去掉最大值和最小值,然后计算代数平均值) import java.util.Arrays; public class StrategyTwo implements ComputableStrategy{ public double computeScore(double [] a){ if(a.length=2) return 0; double score=0,sum=0; Arrays.sort(a); for(int i=1;ia.length-1;i++){ sum=sum+a[i]; } score=sum/(a.length-2); return score; } } 3.上下文 public class GymnasticsGame{ ComputableStrategy strategy; public void setStrategy(ComputableStrategy strategy){ this.strategy=strategy; } public double getPersonScore(double [] a){ if(strategy!=null) return puteScore(a); else return 0; } } 4.应用: Application.java_1 public class Application{ public static void main(String args[]){ GymnasticsGame game=new GymnasticsGame(); game.setStrategy

文档评论(0)

1亿VIP精品文档

相关文档