工作记录之策略模式

这篇具有很好参考价值的文章主要介绍了工作记录之策略模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学无止境,气有浩然!


前言

忽然发现自己在工作中用到策略模式蛮多的,在此处记录一下。


一、策略模式

在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

说白了其实就是消除if…else 所带来的复杂和难以维护。

核心角色

  • 环境(Context):维护一个对策略对象的引用,负责将客户端请求委派给具体的策略对象执行。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。
  • 抽象策略(Abstract Strategy):定义了策略对象的公共接口或抽象类,规定了具体策略类必须实现的方法。
  • 具体策略(Concrete Strategy):实现了抽象策略定义的接口或抽象类,包含了具体的算法实现。

二、工作中的实践

思想

我会将所有的策略存入一个Map中,根据不同的条件,选择不同的策略去执行。由于策略不算多,而且不会给其他接口使用,这里使用的简易版策略模式,借助jdk8提供的Function接口来当作抽象策略,具体的策略使用lambda表达式代入。

代码

代码如下:

	private final Map<String, Function<RequestDto, ResultDto>> METHOD_MAP = new HashMap<String, Function<RequestDto, ResultDto>>(3) {{
        put(CommonConstant.TEST1_METHOD, TestService.this::testMethod1);
        put(CommonConstant.TEST2_METHOD, TestService.this::testMethod2);
        put(CommonConstant.TEST3_METHOD, TestService.this::testMethod3);
    }};
    
	public ResultDto doTest(RequestDto RequestDto) {
        return METHOD_MAP.get(method).apply(RequestDto);
    }

    private ResultDto testMethod1(RequestDto RequestDto) {
        ... 
    }

    private ResultDto testMethod2(RequestDto RequestDto) {
        ... 
    }


    private ResultDto testMethod3(RequestDto RequestDto) {
        ... 
    }

Map作为Context决定使用哪个策略处理,doTest根据环境决定使用哪个策略,剩下的几个方法就是具体的策略了。文章来源地址https://www.toymoban.com/news/detail-834669.html


打完收工!

到了这里,关于工作记录之策略模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录--H5页面对接微信支付踩坑杂记

    应用背景:vite搭建的vue3项目 需求背景:功能都涉及了支付业务,故需要和外部支付系统对接 外部支付系统:聚合支付、微信小程序支付、微信H5支付 读完本文,你将会对以下几个坑点有所了解: 对接第三方服务商过程踩坑 对接小程序支付踩坑 对接微信H5支付踩坑 关于客户

    2024年02月08日
    浏览(39)
  • 前端学习记录~2023.7.15~CSS杂记 Day7

    由于有很多知识非常符合直觉或者和其他语言有通用性,因此个人觉得不需要全部记下来,本篇只记录一些个人觉得需要注意或单独记忆的知识点。 同时为了提高效率和减少对不重要内容的时间投入,会考虑更加精简 本篇是布局概览,下一篇会把各部分再详细整理。 本篇主

    2024年02月16日
    浏览(37)
  • 前端学习记录~2023.7.16~CSS杂记 Day8

    由于有很多知识非常符合直觉或者和其他语言有通用性,因此个人觉得不需要全部记下来,本篇只记录一些个人觉得需要注意或单独记忆的知识点。 同时为了提高效率和减少对不重要内容的时间投入,会考虑更加精简。 相比上一篇总览,本篇更详细记录了正常布局流、弹性

    2024年02月17日
    浏览(34)
  • 杂记 | 记录一次使用Docker安装gitlab-ce的过程(含配置交换内存)

    最近想自建一个gitlab服务来保存自己的项目,于是找到gitlab-ce的方式。 开工前先梳理一下状况: 具备一台云服务器(我用的腾讯云) CentOS7的系统,已安装好了docekr和docker-compose(如果没装先自行装一下) 服务器内存为4G(这个内存有点吃紧,先凑合用) 服务不直接对外暴露

    2024年02月13日
    浏览(47)
  • 深入探讨Java虚拟机(JVM)的工作原理与优化策略

    摘要:本文对Java虚拟机(JVM)的工作原理进行深入探讨,包括其内存管理、垃圾回收以及代码执行等方面。同时,文章还通过具体的代码示例,阐述了JVM的优化策略,旨在提高Java程序的性能。 Java虚拟机(JVM)是Java程序运行的基础平台,其重要性不言而喻。理解JVM的工作原

    2024年02月11日
    浏览(39)
  • 软件工程:左移策略,决策和工作要前置,是提效的关键

    hi,我是熵减,见字如面。 在软件开发的中,你是否也遇到过类似的场景: 团队的目标是在1个月内,开发出一款新的社交媒体应用程序。由于时间比较紧,任务重,所以在开发的初期,方案设计、质量保障和安全性等上面,都是未能充分的考虑,以此来节省开发成本,并保

    2023年04月25日
    浏览(50)
  • [设计模式]行为型模式-策略模式

    策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,且算法的变换不会影响使用算法的客户。 在项目开发中,我们经常要根据不同的场景,采取不同的措施,也就是不同的策略。假设我们需要对a、b这两个整数进行计算,根据条件的不同,需要执行不

    2024年02月19日
    浏览(44)
  • 设计模式之策略模式

    策略设计模式(Strategy Pattern)是一种行为设计模式,它允许在运行时选择算法的行为。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。这种模式使算法的变化独立于使用算法的客户端。 概念 在策略模式中,有以下几个关键组成部分: 策略接口(

    2024年01月23日
    浏览(49)
  • 设计模式——策略模式

    定义: 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把便用算法的责任和算法的实现分割开来,并委派给不算法进象行管理。 主要角色如下: 示例: 假定现在需要

    2024年02月22日
    浏览(36)
  • 设计模式-策略模式

    策略模式是一种行为型设计模式,它允许在运行时动态改变对象的行为。在策略模式中,算法被封装在独立的策略类中,使得它们可以互换使用。下面是一个简单的例子: 假设我们有一个计算税收的系统,现在需要计算不同类型的商品的税收,例如书籍、食品和服装。每种商

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包