Java 设计模式_策略模式

Java 设计模式_策略模式


本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/Rozol/article/details/76268996


策略模式是对算法的包装, 让算法独立于使用它的客户端而发生变化
该策略模式可避免向 if-else / swith 语句那样. 当算法发生变化时需要对客户端做响应修改(添加判断)

策略模式

public interface TravelStrategy {
    /**
     * 出行费用
     * @param km
     * @return
     */
    int calculatePrice(int km);
}
  • 定义一个抽象策略接口(TravelStrategy), 里面定义了一个子类都需要实现的计算出行费用的方法
public class BusStrategy implements TravelStrategy{

    @Override
    public int calculatePrice(int km) {
        // 实现相关业务与算法
        return km * 1000;
    }
}
public class TaxiStrategy implements TravelStrategy {

    @Override
    public int calculatePrice(int km) {
        return km * 2000;
    }

}
  • 子类实现TravelStrategy接口, 子类中根据各自的职责实现 calculatePrice 方法的不同的算法
public class Context {

    private TravelStrategy strategy;

    public Context(TravelStrategy strategy){
        this.strategy = strategy;
    }

    public int calclatePrice(int km){
        return strategy.calculatePrice(km);
    }

}
  • 环境类 Context 持有 TravelStrategy 的引用, 当需要计算出行费用时, 由他负责调用 TravelStrategy 中的 calculatePrice 方法以计算出行费用

使用

public class Test {
    public static void main(String[] args) {
        Context context = new Context(new BusStrategy());
        int cost = context.calclatePrice(100);
        System.out.println("出行费用为: " + cost);

        context = new Context(new TaxiStrategy());
        cost = context.calclatePrice(200);
        System.out.println("出行费用为: " + cost);
    }
}
  • 从使用中可见, 我们仅需给Context传递不同的 TravelStrategy 的子类对象即可帮助我们计算对应的相关费用, 且不需要更改客户端代码
  • 而 if-else / swith 这些判断语句在添加新算法时需要在客户端添加判断, 而策略模式在添加算法时,客户端完全不需要修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值