模式定义
Strategy模式定义了一系列不同的算法封装成不同的类,使客户端通过环境类来调用这些不同的算法类,实现统一对象的不同行为。
使用范围
- 同一个对象在不同的情形下具有不同的行为
举例说明
假设现有两个数字,他们在不同的情况下需要做不同的数学运算,加减乘除,具体由客户端来决定何时实现这些不同行为。我们首先定义一个Strategy接口,提供了execute的方法。同时这个execute具体内部的行为由Strategy的实现类来决定是加还是减,乘还是除。
public interface Strategy {
public int execute(int arg1, int arg2);
}
--------
public class StrategyAdd implements Strategy{
public int execute(int arg1, int arg2) {
return arg1 + arg2;
}
}
--------
public class StrategyMultiply implements Strategy{
public int execute(int arg1, int arg2) {
return arg1 * arg2;
}
}
--------
public class StrategySubstract implements Strategy{
public int execute(int arg1, int arg2) {
return arg1 - arg2;
}
}
至此,客户端完全可以通过调用这些不同的类来实现具体的数学运算。但是Strategy的模式提供了一个环境类,使客户在调用这些不同的类时能使用一致的接口。客户无需知道这些算法类具体如何运算,它只需在环境类中注入它需要的类对象即可。
public class StrategyContext {
private Strategy strategy;
public StrategyContext(Strategy s){
strategy = s;
}
public int executeStrategy(int arg1, int arg2){
return strategy.execute(arg1, arg2);
}
}
客户类通过创建环境类对象,注入算法类。
public class StrategyClient {
public static void main(String args[]){
int r1, r2, r3;
StrategyContext sm = new StrategyContext(new StrategyAdd());
r1 = sm.executeStrategy(2, 4);
sm = new StrategyContext(new StrategySubstract());
r2 = sm.executeStrategy(2, 4);
sm = new StrategyContext(new StrategyMultiply());
r3 = sm.executeStrategy(2, 4);
System.out.println("r1=" + r1);
System.out.println("r2=" + r2);
System.out.println("r3=" + r3);
}
}
运算结果:
r1=6 r2=-2 r3=8
下载示例
本文介绍策略模式的概念及其应用,策略模式允许在运行时选择算法。通过示例演示了如何定义一系列算法并通过环境类调用这些算法。
1837

被折叠的 条评论
为什么被折叠?



