美文网首页
Android设计模式:策略设计模式

Android设计模式:策略设计模式

作者: kjy_112233 | 来源:发表于2018-09-26 15:42 被阅读0次
  • 策略模式定义了一系列的算法,并将一系列算法封装起来,使他们能相互替换。策略模式让算法独立于使用者而独立变化。

(1)策略设计模式实现

  • 声明一个接口,声明一个计算方法
public interface CalculateStrategy {
    int calculatePrice(int km);
}
  • 实现三个具体的计算方法
public class BusCalculate implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        int busP = 2;
        if (km>5)
            busP = busP+km-5;
        return busP;
    }
}

public class SubwayCalculate implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        int subwayP=0;
        if (km<5)
            subwayP = 3;
        if (km>5&&km<=10)
            subwayP=4;
        if (km>10)
            subwayP=5;
        return subwayP;
    }
}

public class TaxiCalculate implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        return  2 * km;
    }
}
  • 创建一个计算类
public class PriceCalculate {
   private  CalculateStrategy calculateStrategy;
    public void setCalculateStrategy(CalculateStrategy calculateStrategy){
        this.calculateStrategy = calculateStrategy;
    }

    public int getPrice(int km){
       return calculateStrategy.calculatePrice(km);
    }
}
  • 代码调用实现
        PriceCalculate priceCalculate = new PriceCalculate();
        priceCalculate.setCalculateStrategy(new SubwayCalculate());
        int price = priceCalculate.getPrice(10);
        System.out.println(price);

优点

  • 使用策略模式可以避免使用多重条件转移语句,封装更彻底,数据更安全。
  • 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免重复的代码。
  • 耦合度低,都是基于接口调用和实现,便于拓展和修改。

缺点

  • 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。
  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类

相关文章

网友评论

      本文标题:Android设计模式:策略设计模式

      本文链接:https://www.haomeiwen.com/subject/uygdoftx.html