策略模式实现

应用场景一:

下图功能为 查询一个点 500千米内所有起降点,运输机场,通航机场,如果不使用策略模式那么前端同学需要进行循环遍历查询内容,拿到查询内容后调用对应内容的接口.或者前端同学传递内容后端同学if("固定起降点"){查询固定起降点接口}else if("运输机场"){查询运输机场接口}...会有很多if else 代码臃肿

应用场景二:

销售打折,普通买家打一折,会员打五折等等,折扣是会经常变化,如果不使用策略模式另外代码会有很多if("普通买家"){打一折}else if("会员"){打五折}....,会有很多判断代码会很臃肿,另外每次添加一种打折方式,都会修改原代码,违反了开闭原则.

我们以第二种应用场景来实现一下:

①首先要定义一个打折接口

/**
 * 打折接口
 */
public interface DisCount {
    /**
     * 打折
     */
    void discount();

    /**
     * 会员类型
     * @return
     */
    String getType();
}

②打一折实现类

@Component
public class OneFold implements DisCount {
    @Override
    public void discount() {
        System.out.println("打一折");
    }

    @Override
    public String getType() {
        return "超级会员";
    }
}

③打五折实现类

@Component
public class FiveFold implements DisCount {
    @Override
    public void discount() {
        System.out.println("打五折");
    }

    @Override
    public String getType() {
        return "会员";
    }
}

④打八折实现类

@Component
public class EightFold implements DisCount {
    @Override
    public void discount() {
        System.out.println("打八折");
    }

    @Override
    public String getType() {
        return "普通买家";
    }
}

⑤打折处理类,利用spring高级注入(spring可以将所有实现了同一接口的实现类注入到list当中),有了这个处理类的好处就是如果再有别的打折方式,只需要实现打折接口,spring会将所有实现类注入list当中,遍历list,将实现类以 打折方式-打折实现类方式 存储到map中,不需要我们手动添加

@Component
public class DiscountHandler {
    
    Map<String, DisCount> discountMap = new HashMap<>(4);
    //spring高级注入
    public DiscountHandler(List<DisCount> personList){
        for (DisCount person : personList) {
            discountMap.put(person.getType(),person);
        }
    }
    public Map<String, DisCount> getDiscountMap(){
        return discountMap;
    }
}

⑥测试

 @Test
    public void springAuto(){
        Map<String, DisCount> discountMap = discountHandler.getDiscountMap();
        discountMap.get("普通").discount();//打八折
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值