一.定义:策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
注:这里所说的算法并不是指“冒泡排序算法”、“搜索算法”之类的算法,它可以是一段代码、一个请求、一个业务操作。
比如实现一个计算器功能,如图:
图1实现代码如下:
Operation接口:
public interface Operation{
public int doOperation(int num1,int num2);
}
具体 实现类 加法和减法:
public class OperationAdd implements Operation{
@override
public int doOperation(int num1,int num2){
return num1+num2;
}
}
public class OperationSub implements Operation{
@override
public int doOperation(int num1,int num2){
return num1-num2;
}
}
计算器类:
public class Calculator {
private Operation operation;
public void setOperation(Operation operation){
this.operation = operation;
}
public int doOperation(int num1, int num2){
return this.operation.doOperation(num1,num2);
}
}
使用:
Calculator calculator = new Calculator();
calculator.setOperation(new OperationAdd());
int result = calculator.doOperation(1,2);
System.out.println(result);
用了策略模式之后代码比普通写法多了一些,很好的体现了一个设计模式的基本原则:开闭原则。开闭原则说的是对修改关闭、对扩展开放。对修改关闭就是不希望别人修改我们的代码,此路不通,对扩展开放就是希望别人以扩展的方式增加功能,策略模式把开闭原则体现得淋漓尽致。
最后总结下策略模式的优缺点
优点:那就是遵循了开闭原则,扩展性良好。
缺点:1.随着你的策略增加,你的类也会越来越多。 2.所有的策略类都要暴露出去,所以如果你在实际开发中使用了策略模式,一定要记得写好文档让你的伙伴们知道已有哪些策略,否则根本不知道如何使用。
网友评论