策略模式简单应用

        目前在做的业务中需要根据配置发放不同的奖励,包括:红包、券、实物等,最直观的做法是if else判断执行不同的发奖逻辑,但是分支太多了容易混淆,代码可读性也差,索性整理一下使用策略模式来实现。

        策略模式的类图如下:

那就依葫芦画瓢,首先定义一个发奖策略类:

public interface PrizeStrategy {
    Object award(String param);
}

然后声明具体发奖策略类:

@Component("coupon")
public class CouponPrizeStrategy implements  PrizeStrategy{
    @Override
    public Object award(String param) {
        System.out.println("发红包了");
        return "coupon";
    }
}


@Component("gift")
public class GiftPrizeStrategy implements  PrizeStrategy{
    @Override
    public Object award(String param) {
        System.out.println("发实物");
        return "实物";
    }
}


@Component("hongBao")
public class HongBaoPrizeStrategy  implements PrizeStrategy{
    @Override
    public Object award(String param) {
        System.out.println("发红包了");
        return "hongbao";
    }
}

 接下来创建上下文类:

@Component
public class PrizeContext {
    @Autowired
    private Map<String,PrizeStrategy> map;

    public Object getPrize(String type){
       return map.get(type).award("");
    }
    
}

测试调用:

@RestController
public class PrizeController {
    @Autowired
    private PrizeContext prizeContext;

    @GetMapping("/prize")
    public Object prize(String award){
        Object prize = prizeContext.getPrize(award);
        System.out.println(prize);
        return "bingo";
    }
}

响应:

调试观察:

 无需额外操作,即可正常注入map进行使用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中的策略模式是一种行为型设计模式,它允许在运行时根据不同的算法或策略来改变对象的行为。这种模式可以将算法的实现与调用代码分离,使得它们可以独立地变化。 下面是一个简单Java策略模式应用实例: 首先,我们定义一个策略接口(Strategy),它包含一个执行算法的方法: ```java public interface Strategy { void execute(); } ``` 然后,我们实现两个具体的策略类(ConcreteStrategyA和ConcreteStrategyB),它们分别实现了策略接口中的execute方法: ```java public class ConcreteStrategyA implements Strategy { @Override public void execute() { System.out.println("执行策略A"); } } public class ConcreteStrategyB implements Strategy { @Override public void execute() { System.out.println("执行策略B"); } } ``` 接下来,我们定义一个上下文类(Context),它包含一个策略对象,并提供一个执行策略的方法: ```java public class Context { private Strategy strategy; public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void executeStrategy() { strategy.execute(); } } ``` 最后,我们可以通过以下方式使用策略模式: ```java public class Main { public static void main(String[] args) { Strategy strategyA = new ConcreteStrategyA(); Strategy strategyB = new ConcreteStrategyB(); Context context = new Context(); context.setStrategy(strategyA); context.executeStrategy(); context.setStrategy(strategyB); context.executeStrategy(); } } ``` 在上述示例中,我们通过策略模式将不同的算法封装在具体的策略类中,并通过上下文类来切换和执行不同的策略。这样,我们可以方便地扩展和替换策略,而无需修改客户端代码。 希望这个实例能帮助你更好地理解Java中的策略模式

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值