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

  • 策略模式定义了一系列的算法,并将一系列算法封装起来,使他们能相互替换。策略模式让算法独立于使用者而独立变化。

(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);

优点

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

缺点

  • 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。
  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 3,798评论 0 14
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,638评论 25 708
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,993评论 2 59
  • 莫克跪到地上俯下身去,左手撑着,右手伸进床底来回摸索。冰凉的水泥地面让他的手掌、膝盖和耳朵都感到舒服。“应该是在这...
    半个橘子不够吃阅读 594评论 1 6
  • age = raw_input("How old are you?")height = raw_input("Ho...
    黑色茄子阅读 127评论 0 0