java设计模式之策略模式

介绍:策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。

 

@Service
public class SaleServiceImpl implements SaleService {

//    @Autowired
//    NormalCalculate normalCalculate;
//
//    @Autowired
//    VipCalculate vipCalculate;


    /**
     *
     * @param userType
     * @param fee
     * @return
     */
//    @Override
//    public double calculateFee(String userType,double fee) {
//        if("nomal".equals(userType)){
//          //省略一万行代码
//            return fee*0.9;
//        }else if("vip".equals(userType)){
//          //省略一万行代码
//            return fee*0.5;
//        }else {
//          //省略一万行代码
//            return fee;
//        }
//    }

/**
*策略模式一般使用方式,但是这种方式还要判断if else,可以利用下面spring的特性来更方便的实现
*/
    //    @Override
//    public double calculateFee(String userType, double fee) {
//        if("nomal".equals(userType)){
//            return normalCalculate.calcuteFee(fee);
//        }else if("vip".equals(userType)){
//            return vipCalculate.calcuteFee(fee);
//        }else {
//            return fee;
//        }
//    }
            
    //仿照spring的getbean方式来实现 
    Map<String,CalculateStrategy> calculateMap = new HashMap<String,CalculateStrategy>();
    /**
     * 策略模式 定义了一系列的算法,并将每一个算法封装起来,而且使他们可以互相替换,让算法独立于他们客户端
     * spring特性,默认将所有的实现类,放入到list中
     * @param calculateStrategyList
     */
    public SaleServiceImpl(List<CalculateStrategy> calculateStrategyList) {
        for (CalculateStrategy calculateStrategy : calculateStrategyList) {
            calculateMap.put(calculateStrategy.getUserType(),calculateStrategy);
        }
    }
    @Override
    public double calculateFee(String userType, double fee) {
        CalculateStrategy calculateStrategy = calculateMap.get(userType);
        return calculateStrategy.calcuteFee(fee);
    }
}

接口

public interface CalculateStrategy {

    public String getUserType();
    public double calcuteFee(double fee);
}

实现类1

@Component
public class NormalCalculate implements CalculateStrategy {
    @Override
    public String getUserType() {
        return "normal";
    }

    @Override
    public double calcuteFee(double fee) {
        //省略一万行代码
        return fee*0.9;
    }
}

实现类2

@Component
public class VipCalculate implements CalculateStrategy {
    @Override
    public String getUserType() {
        return "vip";
    }
    @Override
    public double calcuteFee(double fee) {
        //省略一万行代码
        return 0.5*fee;
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值