策略模式
UML
![策略模式](https://i-blog.csdnimg.cn/blog_migrate/54f5197aed27f673a57abeca1bd3ce42.png)
解释说明
- 策略模式:定义多种算法,每种算法单独封装,算法之间可以相互替换。也即算法变化,使用算法的调用者不受影响。
- 通过使用策略模式,可以通过相同的方式调用不同的算法。减少了定义算法与使用算法之间的耦合。
- 策略模式简化了单元测试,即每个算法在一个单独的类中,可以单独测试。
代码实现
package learn02;
public abstract class Strategy {
public abstract void AlgorithmInterface();
}
package learn02;
public class ConcreteStrategyA extends Strategy {
@Override
public void AlgorithmInterface() {
System.out.println("执行了算法A.");
}
}
package learn02;
public class ConcreteStrategyB extends Strategy {
@Override
public void AlgorithmInterface() {
System.out.println("执行了算法B.");
}
}
package learn02;
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void ContextInterface() {
strategy.AlgorithmInterface();
}
}
import learn02.*;
public class Main {
public static void main(String[] args) {
Context context;
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
}
}
策略模式与简单工厂模式
- 将策略模式和简单工厂模式相结合,可以将耦合降得更低。
- 举例:learn01中使用简单工厂模式,调用者需要知道简单工厂类(OperationFactory.class)和运算类(Operation.class)这两个类。
Operation operation = OperationFactory.createOperate("+");
- 而将工厂模式的选择结合到策略模式的Context中时,调用者只需要知道Context.class一个类。
Context context = new Context("+");
参考资料