在策略模式中,我们会将每个算法单独封装成不同的算法实现类(这些算法实现类都实现了相同的接口),每个算法实现类就可以被认为是一种策略实现,我们只需选择不同的策略实现来解决业务问题即可,这样每种算法相对独立,算法内的变化边界也就明确了,新增或减少算法实现也不会影响其他算法。
如下是策略模式的核心类图,其中 StrategyUser 是算法的调用方,维护了一个 Strategy 对象的引用,用来选择具体的算法实现。

策略模式总结

示例:
public interface Strategy {
int doOperation(int num1, int num2);
}
//运算-加
public class OperationAdd implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
//运算-减
public class OperationMinus implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
//策略-乘
public class OperationMultiply implements Strategy {
@Override
public int doOperation(int num1, int num2) {
return num1 * num2;
}
}
//策略选择,根据不同的操作符号,选择不同的策略实现
public class OperationUse {
public enum Operation {
ADD, MINUS, MULTIPLY
}
public static Strategy getStrategy(Operation ope) {
switch (ope) {
case ADD:
return new OperationAdd();
case MINUS:
return new OperationMinus();
case MULTIPLY:
return new OperationMultiply();
default:
return null;
}
}
}
测试:
public class Test {
public static void main(String[] args) {
int valAdd = OperationUse.getStrategy(OperationUse.Operation.ADD).doOperation(5,3);
System.out.println("Strategy add value:"+valAdd);
int valMinus = OperationUse.getStrategy(OperationUse.Operation.MINUS).doOperation(5,3);
System.out.println("Strategy minus value:" + valMinus);
int valMultiply = OperationUse.getStrategy(OperationUse.Operation.MULTIPLY).doOperation(5,3);
System.out.println("Strategy multiply value:"+ valMultiply);
}
}
本文详细介绍了策略模式如何通过封装不同算法实现,提供可切换的解决方案。策略模式强调算法独立性和清晰边界,适用于需要根据不同条件选择操作的场景。通过实例展示了如何创建策略接口、具体实现和策略选择过程。
1154

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



