admin管理员组文章数量:1794759
Strategy策略模式详解与实例
继续java的视频学习,博客还是不能丢,要坚持!Strategy策略模式是23个设计模式之一,是我们常用的模式之一。
Strategy策略模式:体现了两个非常基本的面向对象设计原则:
---封装变化概念
---编程中受用接口,而不是对接口的实现
1.定义:定义一组算法,讲每个算法都封装起来,使它们之间可以互换;
使在客户端调用它们的时候能够互不影响的变化。
2.组成:抽象策略角色:策略类,通常有一个接口或者抽象类实现;
具体策略角色:包括了相关算法的行为;
环境角色:持有一个策略类的引用,最终给客户端调用。
3.实现:针对一组算法,将每一个算法封装到具有接口的独立类中,从而使他们可以互相替换;可以在不影响客户端的情况下发生变化,可以把行为和环境分开。环境类负责维持和查询行为类各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响客户端。
4.编写步骤:1)对策略对象定义一个公共接口;
2)编写策略类,该类实现了上面的公共接口,
3)在使用策略对象的类中保存一个策略对象的引用,
4)在策略对象的类中,实现策略对象的set和get方法,
5)使用构造方法完成赋值;
5.缺点:客户端必须知道所有的策略类,并自行决定使用哪一个策略类;造成很多策略类,维护代价很高;
解决方法:工厂方法(factory method)。
6.实例:package StrategyTest; //Strategy接口 public interface Strategy { //1)对策略对象定义一个公共接口 public int calculate(int a,int b);//定义一个计算器的方法,接受两个整形参数 } //2)编写策略类,该类实现了上面的公共接口, package StrategyTest; //加运算 public class AddStretegy implements Strategy{ //重写接口的calculate方法,返回a+b public int calculate(int a, int b) { return a+b; } } package StrategyTest; //减运算 public class SubtractStrategy implements Strategy { //重写接口的calculate方法,返回a-b public int calculate(int a, int b) { return a-b; } } package StrategyTest; //除运算 public class SubtractStrategy implements Strategy { //重写接口的calculate方法,返回a/b public int calculate(int a, int b) { return a-b; } } package StrategyTest; //乘运算 public class DivideStrategy implements Strategy { //重写接口的calculate方法,返回a*b public int calculate(int a, int b) { return a/b; } } package StrategyTest; //3)在使用策略对象的类中保存一个策略对象的引用, public class Environment { private Strategy strategy; //4)在策略对象的类中,实现策略对象的set和get方法, public void setStrategy(Strategy strategy){ this.strategy = strategy; } public Strategy getStrategy(){ return this.strategy ; } public int calculate(int a,int b){ return strategy.calculate(a, b); } } package StrategyTest; public class Client { public static void main(String[] args) { //5)使用构造方法完成赋值; AddStretegy add= new AddStretegy(); Environment en = new Environment(add); System.out.println(en.calculate(3, 4)); SubtractStrategy sub = new SubtractStrategy(); en.setStrategy(sub); System.out.println(en.calculate(5, 1)); MultiplyStrategy mul = new MultiplyStrategy(); en.setStrategy(mul); System.out.println(en.calculate(3, 4)); DivideStrategy div = new DivideStrategy(); en.setStrategy(div); System.out.println(en.calculate(3, 1)); } }
运行结果:
参考:
张龙老师圣思园java教程。
版权声明:本文标题:Strategy策略模式详解与实例 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1687003814a127634.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论