策略模式
定义一系列的算法,把他们一个个封装起来,并且使他们可互相替换,该算法可独立于使用它的客户而变化.
代码示例
以计算车费为例:
抽象接口: AbstractStrategy
interface AbstractStrategy {
int calculatePrice(int price);
}
公车:BusStrategy
public class BusStrategy implements AbstractStrategy {
@Override
public int calculatePrice(int km) {
int extraTotal = km - 10;
int extraFactor = extraTotal / 5;
int faction = extraTotal % 5;
int price = 1 + extraFactor % 5;
return faction > 0 ? ++price : price;
}
}
出租:TaixStrategy
public class TaixStrategy implements AbstractStrategy {
@Override
public int calculatePrice(int km) {
return 2 * km;
}
}
context:上下文管理
public class Context {
private AbstractStrategy abstractStragry;
public void setAbstractStragry(AbstractStrategy abstractStragry) {
this.abstractStragry = abstractStragry;
}
public int calculatePrice(int km) {
return abstractStragry.calculatePrice(km);
}
}
验证:
public static void main(String[] args) {
Context context = new Context();
context.setAbstractStragry(new BusStrategy());
System.out.println("bus: " + context.calculatePrice(20));
}
这样很方便的失效的解耦的操作,传统的模式可能需要 if else的模式,这种方式,简介明了,易于管理.
优点
- 上下文(Context)和具体的策略(ConcreteStrategy)是松耦合关系。
- 满足开闭原则(不需要再次修改源码,只需要再次定义新的策略即可)
Android 策略模式的使用
- Volley中HttpStack。
网友评论