java常用设计模式5——策略模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 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方法都卸载同一个类里则会让代码显得臃肿,逻辑也更加复杂。

以上就是策略模式的简单介绍啦(#^ . ^#)

猜你喜欢

转载自blog.csdn.net/baidu_31093133/article/details/83625037