栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

策略模式极简代码实现,使用function接口减少类膨胀

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

策略模式极简代码实现,使用function接口减少类膨胀

策略模式极简代码实现,使用function接口减少类膨胀
    • 具体实现
    • 测试功能

具体实现

解决策略模式的类膨胀问题可以使用享元模式,这边直接用一个函数式接口解决,废话少说,直接上代码

首先是策略注册类,注册类作为策略模式的父类抽象类,只提供获取策略的方法,具体的策略实现方法使用抽象方法交给子类去实现。主要实现如下,使用一个value为函数式接口的hashmap来保存策略方法,map的key作为选择哪一个策略的参数。此demo中声明两个方法,饥饿了就罢工,饱了就干活。init方法中初始化了策略方法的map。策略的获取方法getStrategy,参数是传入的key,通过map的get方法获取相应key的方法,返回方法。

@Component
public abstract class StrategyRegister {
    @Resource
    private StrategyService strategyService;
    
    private Map> functionList;
    //策略key
    private static final String hunger = "饥饿";
    private static final String full = "饱了";
    
    public abstract String work(Param param);
    public abstract String destroy(Param param);

    
    @PostConstruct
    private void init()
    {
        functionList = new HashMap<>(10);
        //如果吃饱了就工作
        functionList.put(full,e->strategyService.work(e));
        //饿了就罢工
        functionList.put(hunger,e->strategyService.destroy(e));
    }

    
    public Function getStrategy(StrategyParam param)
    {
        return functionList.get(param.getStrategy());
    }
}

接下来是策略的具体实现方法work和destroy

@Component
public class StrategyService extends StrategyRegister{

    @Override
    public String work(Param param)
    {
        return param.getName()+"开始工作";
    }

    @Override
    public String destroy(Param param)
    {
        return param.getName()+"罢工了!";
    }

}

controller方法如下

@RestController
public class StratrgyDemoController {
    @Autowired
    private StrategyService strategyService;
    
    @PostMapping("teststrategy")
    public String teststrategy(@RequestBody StrategyParam param)
    {
        Function strategy = strategyService.getStrategy(param);
        Param params = new Param();
        params.setName("张三");
        return strategy==null?"找不到对应策略":strategy.apply(params);
    }
}
测试功能


如此就实现了一个极简的策略方法。比起相当重量级的普通策略模式来说方便很多,具体用法可自行扩展,实际运用中比这复杂很多。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684258.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号