今天有人看了我之前的推文,说我的作息不正常,我就这么被diss了。当然了,懂的人自然懂,不懂的人和他说到最后就是对喷。我也就懒得解释了,下面进入正文。
策略模式在我们日常开发中也是经常遇见的。比如实现某一个功能有多种算法或者策略。我们根据具体情况去实现它。例如:排序算法,我们可以使用插入、冒泡、快排等等。
针对这种情况,我们一般将多个策略写在一个工具类中去方便调用。我们需要A策略就是调用A方法,需要B策略就调用B方法。
如果将这些算法或者策略抽象出来,变成一个接口,不同的策略有不同的实现类。这样我们就可以通过注入不同的对象去实现策略的动态替换,这种模式可扩展和可维护性都很高。
1、针对同一类型的问题多种的处理方法。
2、需要安全的封装多种同一类型的操作时。
3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
创建一个接口:
public interface Strategy {
public int doOperation(int num1, int num2);
}
创建2个实体类去实现此接口:
public class OperationAdd implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 + num2;
}
}
public class OperationSubstract implements Strategy{
@Override
public int doOperation(int num1, int num2) {
return num1 - num2;
}
}
现在我们创建一个工具类:
public class Utils {
private Strategy strategy;
public Utils(Strategy strategy){
this.strategy = strategy;
}
public int executeStrategy(int num1, int num2){
return strategy.doOperation(num1, num2);
}
}
最后我们在主函数中去实现:
public class Demo {
public static void main(String[] args) {
Utils utils = new Utils(new OperationAdd());
System.out.println("10 + 5 = " + utils.executeStrategy(10, 5));
context = new Context(new OperationSubstract());
System.out.println("10 - 5 = " + utils.executeStrategy(10, 5));
}
}
输出:
10 + 5 = 15
10 - 5 = 5
策略模式主要用来分离算法,在相同的行为抽象下有不同的具体实现策略。这个模式很好的演示的开闭原则,也就是定义抽象,注入不同的实现,从而达到更好的可扩展性。
优点:
缺点: