策略模式startegy(对象行为型)
主要应用于 实现某一个功能有多种算法。我们可以根据不同的环境来切换不同的算法。
如果是硬编码,多个算法用if...else 等连接,那我如果新增一个算法,那么需要再修改程序中的源代码,以及修改客户端的调用代码。
这样,代码会很复杂,而且维护困难。
主要矛盾,解决如何使算法可以独立于使用它的客户,而进行变化。
策略模式,将对象本身 和 运算规则分开,其功能非常强大,本身核心思想就是面向对象的多形象思想。
适用于:
1.许多类都相似,只是行为有异。一个系统可以动态的在几种算法中选择一种。
2.客户不会知道算法的具体实现。
3.一个类定义多种行为。
环境类:维护对startegy类的引用。
抽象策略类:所有不同算法的共同接口。
具体策略类:实现具体的算法。
创建一个策略接口
public interface Strategy{
int calculate(int a , int b);
}
具体实现接口的多个算法。比如:加减乘除
public class Add implement Strategy{
public int calculate(int a , int b){
return a+b;
}
}
环境类
public class Environment{
private Strategy strategy;
public Environment(Strategy strategy){
this.strategy = strategy;
}
public void getStrategy(){
return this.strategy;
}
public Strategy setStrategy(Strategy strategy){
this.strategy = strategy;
}
public int calculate(int a , int b){
return this.strategy.calculate(a , b);
}
}
客户端调用
main{
Add add = new Add();
Environment enviroment = new Environment(add);
enviroment.calculate(3,4);
}
这个模式,就是将所有的算法封装好。但是客户端需要知道所有的算法,然后来使用。增加了客户端的使用难度。