简介
策略模式是指有一定行动内容的相对稳定的策略名称,策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法
策略模式:
- 定义了一组算法(业务规则)
- 封装了每个算法
- 这族的算法可互换代替
应用场景
-
多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为
-
需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现
-
对客户隐藏具体策略(算法)的实现细节,彼此完全独立
-
一个类定义了多种行为,并且这些行为在类的操作中以多个条件语句的形式出现
优点:
-
策略模式符合开闭原则
-
避免使用多重条件转移语句,如if...else...语句、switch 语句
-
使用策略模式可以提高算法的保密性和安全性
缺点:
-
客户端必须知道所有的策略,并且自行决定使用哪一个策略类
-
代码中会产生非常多策略类,增加维护难度
实际应用
package designpattern;
interface Strategy {
public int doOperation(int a, int b);
}
class Add implements Strategy {
@Override
public int doOperation(int a, int b) {
return a + b;
}
}
class Subtract implements Strategy {
@Override
public int doOperation(int a, int b) {
return a - b;
}
}
class Context {
private Strategy strategy;
public Context(String mockUserInput) {
if ("Add".equals(mockUserInput)) {
this.strategy = new Add();
} else if ("Subtract".equals(mockUserInput)) {
this.strategy = new Subtract();
}
}
public int doOperation(int a, int b) {
return this.strategy.doOperation(a, b);
}
}