策略模式

策略模式对应于解决某一个问题的一个算法族,允许用户从这个算法族中任选一个算法解决某一问题,同时可以方便更新与增删算法

首先定义策略接口(以产品打折为例子):

public interface Strategy {
    public double getPrice(double standardprice);//传入商品原价
}

首先定义不同的策略:(实现策略接口)

/*普通客户少量购买*/
public class NewCustomerFewStrategy implements Strategy{
    @Override
    public double getPrice(double standardprice) {
        System.out.println("新客户小批量不打折");
        return standardprice;
    }
}
/*新客户大批量*/
public class NewCustomerManyStrategy implements Strategy{

    @Override
    public double getPrice(double standardprice) {
        System.out.println("新客户大批量打九折");
        return standardprice*0.9;
    }
}
/*老客户小批量*/
public class OldCustomerFewStrategy implements Strategy {
    @Override
    public double getPrice(double standardprice) {
        System.out.println("老客户小批量打八折");
        return standardprice*0.9;
    }
}
/*老客户大批量*/
public class OldCustomerManyStrategy implements Strategy {
    @Override
    public double getPrice(double standardprice) {
        System.out.println("老客户大批量打七折");
        return standardprice*0.7;
    }
}

定义一个算法族,使得客户与算法直接分离:

/*算法族,和具体的策略类交互
* 具体的算法与客户端分离
* 如果使用spring依赖注入,可以通过配置文件,动态注入不同的策略*/
public class Context {
    private  Strategy strategy;//当前采用的算法

    public Context(Strategy strategy) {//可以通过构造函数注入
        this.strategy = strategy;
    }

    public void setStrategy(Strategy strategy) {//通过setter注入
        this.strategy = strategy;
    }
    public void printPrice(double s){//客户调用该函数得到报价,s是产品原价
        System.out.println("报价"+strategy.getPrice(s));
    }
}

客户端实现策略模式:

public class client {
    public static void main(String[] args) {
        Strategy s1=new OldCustomerFewStrategy();
        Context context=new Context(s1);//使用s1策略
         context.printPrice(998);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值