Design Patterns教程-策略模式
策略模式的定义是“定义一系列算法,把它们封装起来,并且使它们可以互换”。
策略模式也被称为政策模式(Policy)。
优点:
- 它提供了子类化的替代方案。
- 它在每个类中定义了特定的行为,消除了条件语句的需要。
- 它使得扩展和引入新行为变得更加容易,而无需更改应用程序。
使用场景:
- 当多个类只有行为不同时,例如Servlet API。
- 当你需要算法的不同变体时。
策略模式在核心Java API或JSE 7 API中的应用:
策略模式在高级Java API或JEE 7 API中的应用:
策略模式的UML:
策略模式的实现:
步骤 1:
创建一个Strategy
接口。
// 这是一个接口
public interface Strategy {
public float calculation(float a, float b);
}
步骤 2:
创建一个实现Strategy
接口的Addition
类。
// 这是一个类
public class Addition implements Strategy {
@Override
public float calculation(float a, float b) {
return a + b;
}
}
步骤 3:
创建一个实现Strategy
接口的Subtraction
类。
// 这是一个类
public class Subtraction implements Strategy {
@Override
public float calculation(float a, float b) {
return a - b;
}
}
步骤 4:
创建一个实现Strategy
接口的Multiplication
类。
// 这是一个类
public class Multiplication implements Strategy {
@Override
public float calculation(float a, float b) {
return a * b;
}
}
步骤 5:
创建一个Context
类,该类将请求Strategy
接口来执行具体的策略。
// 这是一个类
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public float executeStrategy(float num1, float num2) {
return strategy.calculation(num1, num2);
}
}
步骤 6:
创建一个StrategyPatternDemo
类。
// 这是一个类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class StrategyPatternDemo {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the first value: ");
float value1 = Float.parseFloat(br.readLine());
System.out.print("Enter the second value: ");
float value2 = Float.parseFloat(br.readLine());
Context context = new Context(new Addition());
System.out.println("Addition = " + context.executeStrategy(value1, value2));
context = new Context(new Subtraction());
System.out.println("Subtraction = " + context.executeStrategy(value1, value2));
context = new Context(new Multiplication());
System.out.println("Multiplication = " + context.executeStrategy(value1, value2));
}
}
输出:
当输入两个值时,程序会输出对应的加法、减法和乘法结果:
Enter the first value: 10
Enter the second value: 5
Addition = 15.0
Subtraction = 5.0
Multiplication = 50.0