java设计模式实战-(反射+策略模式)

article/2025/10/4 15:59:48

学完23种设计模式,相信很多同学都疑问,除了单例模式、工厂模式其他模式还有运用的场景吗?

现在这里就举一个例子。

首先策略模式需要先有了解,我们常用策略模式解决实际开发中的if else特别多的场景。但是在实际的开发中,真正单独只用策略模式的场景还是很少的。我们需要利用Spring的注入功能,实现根据不同的入参,跳转到不同的实现类中,以此来减少if else的使用。

举个场景:假如我们做物流系统,需要根据前段传过来的渠道参数,来定制化不同的规则校验逻辑。这里我们距离alibaba渠道和wechat渠道。那么我们应该怎么做呢?

大致思路:

1、定义抽象接口,提取一个抽象方法,这个方法的具体实现在各个渠道的类中

2、在service层,通过实现ApplicationContextAware接口,获取spring的applicationContext

3、在service层,通过入参确定需要跳转到哪个类实现定制的渠道规则。

具体代码如下:

第一步:

@Service
public interface Channel {void rule_control();
}
@Service
public class WechatChannel implements Channel {@Overridepublic void rule_control() {System.out.println("进入到微信的渠道来源");}
}
@Service
public class AlibabaChannel implements Channel {@Overridepublic void rule_control() {System.out.println("进入到阿里巴巴的渠道来源");}
}

第二步:在service层的写法:

@Service
public class BuyGoods implements ApplicationContextAware {private ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}public void judgeChannel(String buyGoodsChannel){String finalString = buyGoodsChannel+"Channel";Channel bean = (Channel)applicationContext.getBean(finalString);System.out.println("最终实际得到的bean名称:"+bean.toString());bean.rule_control();}}

 最后在controller层传入的参数,模拟如下,结果见如上图:

    @RequestMapping("/buy")public String bug(){System.out.println("进入buy...Controller");String channel = "wechat";buyGoods.judgeChannel(channel);return "bug";}

总结:经过上面的简单处理,我们即完成了不同渠道根据入参定制不同实现类的要求,避免了if else的疯狂使用。


http://chatgpt.dhexx.cn/article/DphZf79U.shtml

相关文章

Java23种设计模式之策略模式【普通写法以及spring中的写法】

目录 设计模式简介策略模式的简介普通写法案例基于注解式改造的案例优缺点策略模式的使用场景 设计模式简介 将设计者的思维融入大家的学习和工作中,更高层次的思考! • 创建型模式: – 单例模式、工厂模式、抽象工厂模式、建造者模式、原型…

Java设计模式-策略模式(支付业务的优化)

一、什么情况下使用策略模式 功能类似的业务功能,避免创建多个接口,大量if else 判断逻辑,简化代码 二、我以支付为例(支付方式有微信,支付宝支付) 1、新建策略抽象类或者接口 public interface ThirdP…

java策略模式实战示例

现已放在gitee上,可以不下载直接参考一下即: https://gitee.com/zhang-xiao-xiang/zxx-pattern 日常碰到的业务概述 登录类型,支付类型,供应商渠道,不同等级会员享受的优惠券价格不一样,等等业务判断,大量if else导致拓展(侧重新增)极其困难,维护(侧重修改)自然是改起来头痛(…

【JAVA设计模式】策略模式

1.什么是策略模式? 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,相同的事情-----选择不用同方式 (不同实现)举例子,最终可以实现解决多重if判断问题。 …

java微信关注事件_java策略模式在接收微信事件推送上的具体应用

java策略模式,在我的认知中是根据不同选择执行不同的实现。通过if或者switch-case也能实现这种逻辑,但是代码冗余,可扩展性不强。 百度百科上的解释为策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景…

Java设计模式之3种策略模式实现

一、什么是策略模式 所谓策略模式,就是定义了一组策略,分别封装在不同类中,每种策略都可以根据当前场景相互替换,从而使策略的变化可以独立于操作者。比如我们要去某个地方,会根据距离的不同来选择不同的出行方式&…

java8 策略模式_JAVA设计模式之策略模式

策略模式:在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对…

git如何提交代码

代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 1. 查看目前代码的修改状态 提交代码之前,首先应该检查目前所做的修改,运行git status命令 a)…

修改git提交时间

问题描述: 修改git提交记录的时间 git脚本: 此方法使用github上的开源工具完成。感谢无私的奉献者! 操作步骤: github上下载文件 解压文件夹,把git-redate文件置于git安装目录的\mingw64\libexec\git-core文件夹…

git提交时常用命令

git提交时常用命令 一、git命令 -- 本地仓库与远程仓库建立链接 git init (初始化本地仓库) git remote add origin 远程仓库网址 git remote -v (查看远程仓库) git remote rm origin (删除远程分支)-- checkout多种用法 git checkout 文件名 &#…

git提交分支

1. git提交分支相关 在本地新建分支,保证和远程分支一样 git checkout -b 分支名如果分支已存在,只需要切换的话 git checkout 分支名提交前先把代码拉下来更新一下,确保不会覆盖别人的代码 git pull origin 远程分支(如果有)解决冲突 git …

Git 的提交

1 提交对象 理解Git分支,就需要了解提交及在提交过程中产生的提交对象(commit object)。在进行提交时Git会存储一个提交对象,其中包含一个指针,它指向此次提交时暂存内容的快照。除此之外,提交对象中还包含…

git代码提交

代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 1. 查看目前代码的修改状态 提交代码之前,首先应该检查目前所做的修改,运行git status命令 a…

【git提交】流程

1- git提交(分支合并)操作流程: git 提交代码到自己的分支,并合并到主分支的完整流程 分支 sml , 主分支, master 分支msl上操作 git status git add . git commit -m ‘xxxxxx’ git pull origin master…

git提交规范,规范自己的提交标准

为了规范我的git提交内容,提交的时候commit -m “备注的信息”,但是每个人的备注信息千奇百怪,为了统一,我们进行了git的规范。 首先要全局安装commitizen npm i -g commitizen4.2.4然后安装插件 npm i cz-customizable6.3.0…

git提交常用命令

git 安装 1.在终端,检查git是否安装 git --version 2.没有安装的话,去git官网,下载git 3.安装后,在终端,检查git是否安装 4设置用户名和邮件地址(最好和github的用户名/邮箱保持一致 git config -…

Git 提交规范

1. 背景 Git 是目前世界上最先进的分布式版本控制系统,在我们平时的项目开发中已经广泛使用。而当我们使用Git提交代码时,都需要写Commit Message提交说明才能够正常提交。 git commit -m "提交"然而,我们平时在编写提交说明时&a…

git 提交命令(附加git常用命令)

一、提交到git仓库 1、进入git终端、输入git init指令、会在当前目录生成一个.git的文件夹 git init2、然后通过git status 查看,该指令作用是 列出修改过的(绿色标识)、新创建的(红色标识)、已经暂存但未提交的文件(白色标识) git status3、然后通过git add ind…

git提交

Git提交代码步骤 1.1 第1步:同步远程仓库代码:git pull 提交代码第1步:git pull 同步远程仓库代码到本地 git add / git commit代码之前首先git pull,需先从服务器上面拉取代码,以防覆盖别人代码;如果有…

你真的了解单点登录(SSO)吗? 单点登录实现方式

在程序开发中,特别是网站类开发,会接触到单点登录(SSO),什么是单点登录?单点登录(SSO)有什么用?下面就来详细介绍一下。 1 单点登录 1.1 什么是单点登录 单点登录的英文名叫做:Single Sign On&#xff0…