【奔跑的菜鸟】Java中的设计模式——策略模式

来源:互联网 发布:人民币国际化知乎 编辑:程序博客网 时间:2024/05/13 15:55

Java的策略模式主要体现了两个非常基本的面向对象的设计原则。1.封装。2在编程中使用接口,而不是直接使用接口的实现。

策略模式的组成:1)抽象策略角色,通常为一个接口抽象类。 2)具体策略角色,包装了相关算法和行为。3)环境角色,持有一个策略类的引用,最终给客户端调用

对于策略模式,算法和环境独立开来,修改算法不会影响环境和客户端。

看下面一个例子:

首先确定一个接口:

package test2;public interface Strategy{public int calculate(int a,int b);}

再对这个实现一些具体的方法(加减乘除):

package test2;public class AddStrategy implements Strategy{public int calculate(int a, int b){return a + b;}}


package test2;public class SubtractStrategy implements Strategy{public int calculate(int a, int b){return a - b;}}

package test2;public class MultipleStrategy implements Strategy{public int calculate(int a, int b){return a * b;}}

package test2;public class DivideStrategy implements Strategy{public int calculate(int a, int b){return a/b;}}

再设置一个环境:

package test2;public class Enviroment{private Strategy strategy ;public Enviroment(Strategy strategy){this.strategy = strategy;}public Strategy getStrategy(){return strategy;}public void setStrategy(Strategy strategy){this.strategy = strategy;}public int calculate(int a ,int b){return strategy.calculate(a,b);}}

最后客户端调用:
package test2;public class Client{public static void main(String[] args){AddStrategy add = new AddStrategy();Enviroment enviroment = new Enviroment(add);System.out.println(enviroment.calculate(6, 3));SubtractStrategy subtract = new SubtractStrategy();enviroment.setStrategy(subtract);System.out.println(enviroment.calculate(6, 3));MultipleStrategy multi = new MultipleStrategy();enviroment.setStrategy(multi);System.out.println(enviroment.calculate(6, 3));DivideStrategy divide = new DivideStrategy();enviroment.setStrategy(divide);System.out.println(enviroment.calculate(6, 3));}}


最后运行结果如下:

93182














0 0