策略模式

策略模式

定义一系列的算法,把他们一个个封装起来,并且使他们可互相替换,该算法可独立于使用它的客户而变化.

代码示例

以计算车费为例:
抽象接口: 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。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 10,540评论 9 62
  • 1 场景问题 1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要...
    4e70992f13e7阅读 8,283评论 2 16
  • 概念及定义 概念在完成某一功能时,有时需要根据不同环境采取不同的策略或行为。将这些不同的策略或行为(称为算法)一一...
    maxwellyue阅读 3,635评论 0 0
  • 1.概述 demo地址,欢迎star 例子1: 商场产品销售:可以正常价格售出,可以打折形式售出,也可以通过积分的...
    barry阅读 4,158评论 0 1
  • 场景分析 我们在网上购买商品的时候,经常遇到各种打折优惠活动,不同的节假日或者时间优惠策略都不相同,如果让我们去实...
    西木柚子阅读 4,432评论 0 2