一,策略模式详解
-
概念
定义一系列的算法,把他们一个个封装起来,并且使他们可以相互替换,本模式使得算法可独立使用它的客户变化
-
使用场景
一个类中定义了多种行为,并且这些行为在这个类的方法中以多个条件语句的形式出现,那么可以使用策略模式避免在类中使用大量的条件语句
- UML
public interface AbstractStrategy {
int calculatePrice(int km);
}
public class StrategyContext {
private AbstractStrategy abstractStrategy;
public void setAbstractStrategy(AbstractStrategy abstractStrategy) {
this.abstractStrategy = abstractStrategy;
}
public int calclatePrice(int km){
return abstractStrategy.calculatePrice(km);
}
}
public class BusStrategy implements AbstractStrategy{
@Override
public int calculatePrice(int km) {
return 100;
}
}
public class BusStrategy implements AbstractStrategy{
@Override
public int calculatePrice(int km) {
return 100;
}
}
public class TaxiStrategy implements AbstractStrategy{
@Override
public int calculatePrice(int km) {
return 1000;
}
}
StrategyContext context=new StrategyContext();
context.setAbstractStrategy(new BusStrategy());//传入需要用的算法功能
context.calclatePrice(20);
-
优点
(1)上下文(Context)和具体策略是松耦合关系 因为 context是与一个抽象类或者是一个接口进行关联
(2)满足开闭原则
二,在android中的实际运用
-
Volley中对于HttpStack的设计用到的就是策略模式