策略模式

 

环境角色:持有一个Strategy类的的引用。

抽象策略角色:通常由一个抽象类或接口实现。

具体策略角色:包装了相关的算法或行为。

 

 

public class StrategyDemo {
  interface Strategy {
    Double strategyInterface(Double price);
  }

  static class SmallDiscountStrategy implements Strategy{

    @Override
    public Double strategyInterface(Double price) {
      return price*0.88;
    }
  }

  static class BigDiscountStrategy implements Strategy{

    @Override
    public Double strategyInterface(Double price) {
      return price*0.75;
    }
  }

  public static void main(String[] args) {
    Double carPrice = 300000.00;
    Strategy strategy;
    System.out.println("想买一辆车,车价30W,走普通客户路线吧");
    strategy = new SmallDiscountStrategy();
    System.out.println("折扣后的车价:"+strategy.strategyInterface(carPrice));
    System.out.println("太贵了,还好亲戚是总经理,走大客户路线吧");
    strategy = new BigDiscountStrategy();
    System.out.println("折扣后的车价:"+strategy.strategyInterface(carPrice));
  }
}


想买一辆车,车价30W,走普通客户路线吧
折扣后的车价:264000.0
太贵了,还好亲戚是总经理,走大客户路线吧
折扣后的车价:225000.0

 

 

策略模式的优缺点:

  优点:

  1.可以使用继承实现将策略的公共代码迁移到父类中,从而避免重复的代码

  2.策略扩展不再需要修改原有代码,只需继承实现策略接口即可,符合开闭原则

  3.使用策略模式可以避免使用多重条件判断语句,利于维护

  缺点:

  1.客户端必须知道所有的策略实现类,并自行决定使用哪一个

 

扩展,策略模式与函数式编程:

  在函数式编程中,将函数的行为传递给调用者,而策略模式正是描述行为的一个最好体现,所以在函数式编程中策略模式应用的十分广泛,也更容易理解。

 

转载于:https://www.cnblogs.com/sstone/p/8477464.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值