版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_31093133/article/details/83625037
通常一个问题有多个解决方案的时候,我们会把每个解决方案封装到自己的类里面,这样可以避免在同一个类里通过if,else或者switch来判断使用哪种方案。
比如:
if(type == 1){
return fun1();
}else if(type == 2){
return fun2();
}else{
return fun();
}
fun(){...};
fun1(){...};
fun2(){...};
如果我们要增加一个判断类型就要再增加一个else if(),并且增加一个fun方法,这样就会导致同一个类里代码越来越混乱。
使用策略模式怎么做呢?
代码示例:
1、首先定义一个策略接口,这个接口负责声明所有策略都必须具备的方法
/**
* 策略接口
*/
public interface CalculateStrategy {
String calculatePrice();
}
2、继承接口实现具体的策略
/**
* 公交车收费策略
*/
public class BusStrategy implements CalculateStrategy {
@Override
public String calculatePrice() {
return "公交车收费策略";
}
}
/**
* 地铁策略
*/
public class SubwayStrategy implements CalculateStrategy {
@Override
public String calculatePrice() {
return "地铁策略";
}
}
3、使用策略
CalculateStrategy calculateStrategy;
public void setCalculateStrategy(CalculateStrategy calculateStrategy){
this.calculateStrategy = calculateStrategy;
}
//使用的时候先设置策略再使用就可以啦
setCalculateStrategy(new BusStrategy());
String str = calculateStrategy.calculatePrice();
Log.i("test", "策略模式 :" + str);
4、如果要新增策略只需要新增实现了策略接口的类就行了
/**
* 新增的策略
*/
public class NewAddStrategy implements CalculateStrategy {
@Override
public String calculatePrice() {
return "新添加的策略";
}
}
看起来不过是封装了一下fun方法而已,那么策略模式到底好在哪里呢?
其实就是增强代码的稳定性和可读性以及可扩展性,对于越复杂的业务效果就越直观。如果fun方法都卸载同一个类里则会让代码显得臃肿,逻辑也更加复杂。
以上就是策略模式的简单介绍啦(#^ . ^#)