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));
}
}
最后运行结果如下:
9
3
18
2