java使用策略模式实现统一接口的不同效果返回

2023-10-29

首先说下什么是策略模式以及策略模式的优缺点。

策略模式
是指定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到其他使用算法的用户;
可以避免多重的if else 判断语句

1.加入系统中有很多类,而他们的区别仅仅在于他们的行为不同
2.一个系统需要动态的在几种算法中选择一种
优点:
1、策略模式符合开闭原则。
2、避免使用多重条件转移语句,如 if…else…语句、switch 语句
3、使用策略模式可以提高算法的保密性和安全性。
缺点:
1、客户端必须知道所有的策略,并且自行决定使用哪一个策略类。
2、代码中会产生非常多策略类,增加维护难度。

实际使用:比如前端菜单 分不同的子系统,不同子系统不同的展示菜单的效果,然后每个子系统中还有着重复的实现效果。

新建一个实体类,存储定义固定的值和对应的实现方法。

@Data
public class CommonVO {
    //这里需要定义好所有的子系统,然后根据code,去分配对应的所属类型,然后进行调用不同的方法
    private static Map<String, CommonMenuData> strategyMap=new HashedMap();
    private interface  CommonKey{
        String AJ="AJ";//A系统
        String BJ="BJ";//B系统
        String CJ="CJ";//C系统
      }
    static{
        strategyMap.put(CommonVO.CommonKey.AJ,new CommmonAData());
        strategyMap.put(CommonVO.CommonKey.BJ,new CommmonBData());
        strategyMap.put(CommonVO.CommonKey.CJ,new CommmonCData());
     }

    public static Map<String, CommonMenuData> getStrategyMap() {
        return strategyMap;
    }
}

然后定义个接口,所有不同菜单系统都实现这个接口即可(这里的都是共同方法)

public interface  CommonMenuData {
	  //定义公共返回的接口集(每个子系统的内容返回不一样,当然也可以统一)
      Object resultCommonData(String code);
}

然后具体实现-----A系统内容

@Component
public class CommmonAData implements CommonMenuData {
	//参数自定义就好,但是code一定要传
	@Override
    public  Object resultCommonData(String code) {
		//TODO
		return "A系统菜单";
	}
}

然后具体实现-----B系统 内容 (C系统也一样省略。。。)

@Component
public class CommmonBData implements CommonMenuData {
	//参数自定义就好,但是code一定要传
	@Override
    public  Object resultCommonData(String code) {
		//TODO
		return "B系统菜单";
	}
}

写一个策略类

public class CommonDataStrategy {
    //调用具体每个对应的类方法
    public  Object show(CommonGzpData commmondata, String code){
      return  commmondata.resultCommonData(code);
    }
}

写一个controller就可以调用了

@GetMapping("/commonData")
@ApiOperation(value = "公共查詢列表数据")
public @ResponseBody Object commonData(String code) {
		//根据上面定义好的map 值去和前台传的code对应
		CommonDataStrategy com=new CommonDataStrategy();
		Object objList=com.show(CommonVO.getStrategyMap().get(code));
		return ResultVO.getSuccess("查询成功",objList);
	}

最后只要前端调用的时候传入不同的菜单Code即可 调用不同的逻辑实现效果

A 系统
GET https://localhost:8444/xxxx/commonData?code=AJ
B 系统
GET https://localhost:8444/xxxx/commonData?code=BJ

补充 CommonGzpData 类:

public interface  CommonGzpData {
      Object resultCommonData(Long siteId, String code, String url, String parentType);
}

说明:这个类就是一个接口,定义规范,而其他的几个类都会实现这个接口的规范方法。
如图:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java使用策略模式实现统一接口的不同效果返回 的相关文章

随机推荐

  • Google API 设计指南-文档

    翻译自 API Design Guide Documentation 这一章是为 API 添加内部文档的指南 大部分 API 有概述 教程和更高级别的参考文档 此指南不讨论 API 名 资源名和方法名的信息请查看命名约定 注释格式 在 pr
  • OpenGL ES几个概念-顶点着色器、片元着色器、EGL

    一 OpenGL ES OpenGL ES是使用在手机端和嵌入式里的3D图形应用程序编程接口 是跨平台的API OpenGL ES是OpenGL的简化版本 OpenGL2 x 版本相比 1 x 版本有较大差异 1 x 版本为 fixed f
  • Kylin Flink Cube 引擎的前世今生

    Apache Kylin 是一个开源的 分布式的分析型数据仓库 提供Hadoop Spark 之上的 SQL 查询接口及多维分析 OLAP 能力以支持超大规模数据 它能在亚秒内查询巨大的表 Kylin 的核心思想是 预计算 将数据按照指定的
  • C++11之智能指针(unique_ptr、shared_ptr、weak_ptr、auto_ptr)浅谈内存管理

    目录 前言 智能指针 使用方法 unique ptr 实现unique ptr类 使用uniquePtr shared ptr 实现SharedPtr 使用shared ptr weak ptr 使用weak ptr 前言 下面这段代码看起
  • Windows下同时安装python 2 和 3 详细教程 ——为了GitHack工具 同时安装python2和3的过程记录

    搜了半天发现 GitHack竟然真的只能在python2中运行 心痛 不得不去下python2 我之前下的是python3 文章目录 1 下载 安装 python2和3 2 配置python 2 x 的环境变量 3 将python 2 x
  • 投票==公平???

    前言 我们在团队中遇到意见分歧时 通常会通过投票机制以期来得到一个公平 公正的让所有人都能信服的解决方案 但是 这样的方案是否真的绝对公平 只有道德上的相对民主 没有制度上的绝对公平 求同存异才能长治久安 关于投票的经典场景 古雅典陶片放逐
  • TP-LINK交换机登录Web页面的操作方法

    TP LINK交换机登录Web页面的操作方法 之前小编介绍了TP LINK路由器登录Web管理页面的操作步骤 以及路由器无法登录的解决方法 详见文章 Tp link路由器管理界面无法登陆原因解析 下面栏目小编具体说说TP LINK交换机登录
  • Matlab设计数字滤波器入门

    一个3阶低通滤波器由下面差分方程描述 y n 0 0181 x n 0 0543 x n 1 0 0543 x n 2 0 0181 x n 3 1 76 y n 1 1 1829 y n 2 0 2781 y n 3 画出这个滤波器的幅度
  • VUE的基本使用(上)

    一 开发环境配置 VSCode 插件安装 jshint js代码规范检查 Beautify 一键美化代码的插件 Vetur vue文件识别插件 Javascript ES6 code snippets ES6语法提示 Auto Rename
  • 计算机ip保留地址,ip地址显示为保留地址怎么解决

    ip地址显示为保留地址怎么解决 2016 09 05 10 28 标签 dhcp ip地址 ip是保留地址怎么解决 ip作为计算机网络相互连接进行通信的协议 当dhcp超出系统规定的时间后 便会自动分配一个保留地址作为ip 如果主机ip地址
  • 涂鸦WIFI模组方案(MCU SDK)

    摘自涂鸦官方视频教程 https www bilibili com video BV1pb41117LD spm id from 333 999 0 0等 摘自 涂鸦IoT开发平台MCU开发接入 Wi Fi App面板 地址 https w
  • window.close()无效,原因剖析

    官方解释 https developer mozilla org en US docs Web API Window close 简单的说就是 window close 方法只能关闭由window open 或者浏览器直接输入url打开的页
  • 【敬伟ps教程】图层进阶知识

    文章目录 图层过滤和锁定 图层链接 图层编组 图层合并 图层盖印 图层复合 图层剪贴蒙版 图层过滤和锁定 图层过滤可以根据图层不同的性质进行查看管理 图层锁定即是对图层或图层某部分进行操作保护 按钮分别为 锁定透明像素 禁止对透明区域进行操
  • 使用JavaScript实现一个简单的计时器

    简介 计时器是前端开发中常见的功能之一 它可以帮助我们记录时间并进行倒计时等操作 在本篇博客中 我将向大家介绍如何使用JavaScript实现一个简单的计时器 实现步骤 第一步 创建HTML结构 首先 我们需要在HTML中创建一个用于显示计
  • 大语言模型参数说明(Temperature,Top p,Top k)

    如下是一些模型的运行界面 在使用OpenAI的接口 常常遇见一些参数 搞清它们的含义促使我们更进一步理解输出的结果 学习传送带 1 Temperature 用于调整随机从生成模型中抽样的程度 因此每次点击 生成 时 相同的提示可能会产生不同
  • app性能

    性能获取办法 appium webview context execute script perfmance api appium selenium的ExecuteScript Api 注入js return JSON stringify
  • muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕

    每一个成熟的项目都有大大小小的日志系统 在关键的地方打印日志信息 常用来跟踪程序运行 查找错误原因等 可以节省大量的debug时间 muduo的日志信息有5个级别 TRACE 细粒度最高的日志信息 打印的最详细 DEBUG 细粒度级别上对调
  • 程序中的耦合与解耦学习(三)——解耦学习1

    以下内容来源于网友内容 引用网友链接 简要 一 解耦都是需要代理的 本质上并不存在没有代理就发生两个部件之间解耦的情况 二 耦合 指的是两个可以协作的部件的关系 A和B可以协作 则A和B的关系是耦合 三 如果A可以和O P Q S 简称集合
  • API接口签名验证

    系统从外部获取数据时 通常采用API接口调用的方式来实现 请求方和接口提供方之间的通信过程 有这几个问题需要考虑 1 请求参数是否被篡改 2 请求来源是否合法 3 请求是否具有唯一性 今天跟大家探讨一下主流的通信安全解决方案 参数签名方式
  • java使用策略模式实现统一接口的不同效果返回

    首先说下什么是策略模式以及策略模式的优缺点 策略模式 是指定义了算法家族 分别封装起来 让他们之间可以相互替换 此模式让算法的变化不会影响到其他使用算法的用户 可以避免多重的if else 判断语句 1 加入系统中有很多类 而他们的区别仅仅