谈谈:你在工作中用到的设计模式!

谈谈:你在工作中用到的设计模式!

Hello大家龙年好!

春节的假期转眼间过去,我们也要回归往日的节奏

因为最近和小伙伴们聊天发现,我们普遍在面试中,对被问起设计模式在工作中的应用,既有点熟悉,又有点陌生,

在网上看吧,又感觉鸡肋(为啥?不能解燃煤之急啊!哈哈),所以,为了打破这一尴尬的窘境,我亲自针对痛点来一篇(若写的不好,尽管喷!哈哈哈)


整体UML

在这里插入图片描述

写之前,我先抛一道面试题,我们一起思考思考!(本篇对已工作或即将如职场的都是不错的巩固与积累,也强烈建议跟着操作一遍,你会有不一样的收获!)

面试官:你在工作中用到过设计模式吗?怎么运用的?(你别好家伙,先想想)

好了,别想了(哈哈哈),我们往下看

嗯,我在工作中用过一些设计模式(若没用过,也不要心虚,俺们按套路来),

  • 我主要用到就是工厂模式,单例模式,策略模式,以及模版,代理模式等(你心里说我平常开发都是if-else啊!别急嘛,我们往下看),

怎么运用的?(我们先说主体的大框架)

  • 嗯~~~我采用的最多的是工厂,策略以及模版方法三种涉及模式的结合(先说使用的哪几种)
  • 我当时在供工作中负责打车软件一个子模块商品链接的支付业务(给出自己工作中的案例)——或者举自己工作中使用if_else多的屎山案例
  • (这步关键)对于此支付服务,对于有微信支付宝以及银行卡等支付方式我是放到策略服务中,
  • 对于公共的逻辑,如支付的前置检查以及支付后的后置处理这块的公共代码我是抽象出来放在模版方法模式中
  • 对这些策略服务管理,何时使用?,我就采用的工厂模式实现的需求

一般说完这些,面试官会感觉,这小伙子工作中学了点东西嘛可以可以!

嘿嘿,你正准备放松一下,这时面试官有往下追问了:能说下具体的细节吗?

你说,这特么我咋知道啊!哈哈哈,我特么也是临时背的啊,没实践过啊!喵的!(打住,别慌,别语无伦次,正所谓,**他有张良计,我有过墙梯嘛!**哈哈哈~)

问到这一步,我们就要根据代码来说了,这段实战代码若初看不怎么会的,我推荐手敲一遍!!!(看看我都敲三个感叹号了啊)

实战案例分析:(案例结合Spring框架实现)

结合上面我们所说的模块案例:支付业务

1.首先:定义一个接口

我们定义一个支付服务,里面包含一个支付方法

/***子模块: 高维炫彩眼镜支付服务
*/
public interface  GlassesPayService{//定义一个支付方法public void pay(GlassesPayRequest glassesPayRequest);
}/***此类定义请求的方法
*/
public class GlassesPayRequest{}

2.定义抽象服务类

这个抽象服务类: 目的是把所有支付渠道中的公共代码抽取出来,(亦是模板方法的体现)

定义整体的支付逻辑

仔细看代码里面的解说!

//实现接口,目的实现pay方法
public  abstract  class  AbstractGlassesPayService  implements  GlassesPayService{//这个里面很重要,pay定义了整体的支付逻辑(也就是我们上面所说的大框架)@Overridepublic void pay(GlassesPayRequest glassesPayRequest){//支付前的检查preCheck(glassesPayRequest);//核心逻辑,抽象再此(For wechat,Alipay....等具体业务实现,留给具体的实现类处理)doPay(glassesPayRequest);//支付后处理postHandle(glassesPayRequest);}//抽象方法,子类需要去实现的public abstract void doPay(GlassesPayRequest glassesPayRequest);private void preCheck(GlassesPayRequest glassesPayRequest){//这里面是支付前的检查,保障支付的安全,防止盗刷...} private void postHandle(GlassesPayRequest glassesPayRequest){//这里面是支付成功后的处理,比如积分啦,还有其他的抽奖等巴拉巴拉...}}

好了,上面的主体我们已经定义完成,我们继续往下敲

3.定义策略服务

这玩意儿我还是比较推荐的,对于有大量的if-else的场景,不管重构还是锻炼自己都是挺爽的

支付宝策略服务
@Service
public  class  GlassesAliPayService  extends AbstractGlassesPayService{//实现方法@Overridepublic void doPay(GlassesPayRequest glassesPayRequest){//AliPay  支付逻辑}
}
微信策略服务
@Service
public  class  GlassesWeCahtPayService  extends AbstractGlassesPayService{//实现方法@Overridepublic void doPay(GlassesPayRequest glassesPayRequest){//WeChat  支付逻辑}
}
央行卡策略服务
@Service
public  class  GlassesBankPayService  extends AbstractGlassesPayService{//实现方法@Overridepublic void doPay(GlassesPayRequest glassesPayRequest){//央行卡  支付逻辑}
}

4.定义工厂

不是东厂也不是西厂,就是特么的工厂,干嘛的? 当然是用来统一管理策略服务的啦!~

我们定义了一个MAP: 用来将所有的用到的策略服务全部注入我们定义的glassessPayServiceMap

当我们需要用的时候,直接调用getGlassesPayService()方法就可以啦!~

@Service
public  class  GlassesPayServiceFactory{@Autowiredpublic Map<String,GlassesPayService> glassessPayServiceMap=new ConcurrentHashMap<>();public GlassesPayService getGlassesPayService(String glassesPayChannel){//eg: AliPay + "PayService" -> AliPayPayServicereturn  glassessPayServiceMap.get(glassesPayChannel+"PayService");}
}

好了,到此我们在Spring框架的基础上,采用模版方法,策略模式,工厂方法模式实现了我们子啊工作一个使用的场景!~

完结撒花!~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479485.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尚硅谷ES基础 - RESTful JSON基本概念倒排索引HTTP

RESTful & JSON REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。 Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。…

CSS3盒子模型

盒子模型&#xff08;Box Modle&#xff09;可以用来对元素进行布局&#xff0c;包括内边距&#xff0c;边框&#xff0c;外边距&#xff0c;和实际内容部分 盒子模型分为两种: 第一种是 W3C 标准的盒子模型&#xff08;标准盒模型&#xff09; 第二种 IE 标准的盒子模型&am…

爬虫入门一

文章目录 一、什么是爬虫&#xff1f;二、爬虫基本流程三、requests模块介绍四、requests模块发送Get请求五、Get请求携带参数六、携带请求头七、发送post请求八、携带cookie方式一&#xff1a;放在请求头中方式二&#xff1a;放在cookie参数中 九、post请求携带参数十、模拟登…

C++进阶(一) 继承

一、继承的概念及定义 1.1继承的概念 继承(inheritance)机制是面向对象程序设计 使代码可以复用的最重要的手段&#xff0c;它允许程序员在 保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称 派生类。继承呈现了面向对象 程序设计…

如何在Excel中冻结行或列标题?这里提供两种方法

随着数据的增长&#xff0c;许多Excel工作表可能会变得很大&#xff0c;因此冻结行和列标题或冻结窗格非常有用&#xff0c;以便在滚动工作表时将标题锁定到位。在Excel中&#xff0c;可以冻结行标题和列标题&#xff0c;也可以只冻结一个。这不会影响将要打印的单元格。列标题…

Sora 技术实现

Sora 技术实现 Sora 的发布宛如一枚核弹&#xff0c;受到各行各业的追捧和关注。不可否认&#xff0c;Sora 生成的视频效果确实太炸裂了&#xff0c;甩开之前文生视频模型几条街。下面是 Sora vs. Pika vs. RunwayML vs. Stable Video 生成视频效果对比 Sora vs. Pika vs. Run…

centos7 arm服务器编译安装onnxruntime-gpu

前言 ONNX Runtime是适用于Linux,Windows和Mac上ONNX格式的机器学习模型的高性能推理引擎,但在arm服务器上,onnxruntime只有CPU版的,GPU版的没有,因此需要自行去编译GPU版本的才可以。 环境准备 1、python3.8 2、cmake:2.26.0版本以上,可以直接下载aarch64版本的进行…

最大似然函数

1. 似然函数 似然函数在统计学中是一种关于统计模型参数的函数&#xff0c;用于描述在已知随机变量输出结果时&#xff0c;未知参数的可能取值。这个概念起源于对概率和似然性的区分。概率描述的是已知参数时随机变量的输出结果&#xff0c;而似然性则关注在已知随机变量输出结…

Windows端口被占用

查看端口占用情况&#xff1a; 打开命令提示符&#xff08;CMD&#xff09;或PowerShell&#xff0c;运行以下命令来查看端口占用情况&#xff1a; netstat -ano | findstr :<端口号>例如&#xff1a; > netstat -ano | findstr :3306TCP 0.0.0.0:3306 …

《英伟达-本地AI》--NVIDIA Chat with RTX-本机部署

阿丹&#xff1a; 突然发现公司给配置的电脑是NVIDIA RTX 4060的显卡&#xff0c;这不搞一搞本地部署的大模型玩一玩&#xff1f;&#xff1f;&#xff1f; 从0-》1记录一下本地部署的全过程。 本地模型下载地址&#xff1a; Build a Custom LLM with Chat With RTX | NVIDIA…

“利用电子医院记录,针对急性护理环境中的老年人,开发并验证了一项医院脆弱风险评分:一项观察性研究“

总结 背景 年长者在全球范围内成为医疗保健的增长用户。我们的目标是确定是否可以利用常规收集的数据来识别具有虚弱特征并面临不利健康结果风险的年长者。 方法 使用三步方法开发和验证了一种医院脆弱风险评分&#xff0c;该评分基于《国际疾病和相关健康问题统计分类第十次修…

BTY800P-FBEM12/M8传感器分配器

BTY800P-FBEM12/M8传感器分配器简介 BTY800P-FBEM12/M8传感器分配器通常具有多个通道&#xff0c;每个通道可以连接一个传感器&#xff0c;并提供相应的输出连接器&#xff0c;以便将传感器信号分别输出到多个设备或系统。M12/M8传感器分配器具有良好的电气绝缘性能和抗干扰能…