返回
细说策略模式及运用——设计模式系列
前端
2024-01-29 00:36:33
策略模式 ,又称政策模式,是面向对象编程中的一种设计模式。它定义了一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。封装的策略算法一般是独立的,策略模式根据输入来调整采用哪个算法。关键是策略的实现和使用分离。
1. 你曾见过的策略模式
现在电子产品种类繁多,尺寸多种多样,充电方式也有很大差异。有些手机或平板电脑的充电器插头是 USB Type-C,有些是 Micro USB,还有些是 Lightning。为了解决充电方式多样性的问题,市面上出现了多种多样的充电线,其中一种是多头充电线。
多头充电线可以同时支持多种充电方式,这种设计其实就运用了策略模式。多头充电线中的每个充电头都可以看作一个策略,根据不同的设备,选择使用不同的充电头。这种设计使得多头充电线可以兼容多种设备,非常方便。
2. 策略模式的优点
策略模式有很多优点,包括:
- 可重用性: 策略模式可以将算法封装成独立的类,这样就可以在不同的程序中重复使用这些算法。
- 可扩展性: 策略模式可以很容易地添加新的算法,而不需要修改现有的代码。
- 可测试性: 策略模式可以很容易地测试,因为算法是独立的。
- 灵活性: 策略模式可以根据不同的情况选择不同的算法,这使得程序更加灵活。
3. 策略模式的缺点
策略模式也有缺点,包括:
- 性能开销: 策略模式会带来一些性能开销,因为每次选择算法时都需要进行一次方法调用。
- 代码复杂度: 策略模式会使代码变得更加复杂,因为需要编写更多的类和方法。
- 难以理解: 策略模式可能会使代码难以理解,因为需要理解每个策略的实现。
4. 策略模式的应用场景
策略模式可以应用于多种场景,包括:
- 排序: 策略模式可以用于对数据进行排序,不同的排序算法可以作为策略类。
- 搜索: 策略模式可以用于对数据进行搜索,不同的搜索算法可以作为策略类。
- 压缩: 策略模式可以用于对数据进行压缩,不同的压缩算法可以作为策略类。
- 加密: 策略模式可以用于对数据进行加密,不同的加密算法可以作为策略类。
5. 策略模式的代码示例
public class StrategyPattern {
public static void main(String[] args) {
// 定义一个策略接口
interface Strategy {
int doOperation(int num1, int num2);
}
// 定义一个具体策略类,实现加法运算
class AddStrategy implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
// 定义一个具体策略类,实现减法运算
class SubtractStrategy implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
// 定义一个策略上下文类
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2) {
return strategy.doOperation(num1, num2);
}
}
// 使用策略模式
Context context = new Context(new AddStrategy());
int result = context.executeStrategy(10, 5);
System.out.println("10 + 5 = " + result);
context = new Context(new SubtractStrategy());
result = context.executeStrategy(10, 5);
System.out.println("10 - 5 = " + result);
}
}
在这个例子中,Strategy
接口定义了一个doOperation
方法,用于执行策略。AddStrategy
和SubtractStrategy
是两个具体策略类,分别实现了加法和减法运算。Context
类是策略上下文类,它包含一个Strategy
对象。executeStrategy
方法使用Strategy
对象来执行策略。
6. 总结
策略模式是一种非常有用的设计模式,它可以使代码更加灵活、可扩展和可测试。策略模式的应用场景也非常广泛,包括排序、搜索、压缩、加密等。