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

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

Hello大家龙年好!

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

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

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


图还没画完,时间不够了,哈哈哈,明天完善
在这里插入图片描述

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

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

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

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

  • 我主要用到就是工厂模式,单例模式,策略模式,以及模版,代理模式等(你心里说我平常开发都是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.mzph.cn/news/691548.shtml

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

相关文章

体验即王道:提升B端管理系统用户体验的10大法则

大家好&#xff0c;我是贝格前端工场&#xff0c;专注于前端开发和UI设计&#xff0c;有需求可以私信。本篇从用户体验角度来分析管理系统如何设计和开发。 一、用户体验的重要性 B端管理系统的用户体验对于企业的成功至关重要。 提高工作效率&#xff1a;一个好的用户体验可…

什么是网络安全?一文了解网络安全究竟有多重要!

随着互联网的普及和数字化进程的加速&#xff0c;网络安全已经成为我们生活中不可或缺的一部分。然而&#xff0c;很多人对于网络安全的概念仍然模糊不清。 那么&#xff0c;什么是网络安全&#xff1f;它究竟有多重要呢&#xff1f; 一、网络安全的定义 网络安全是指保护网络…

Sora一出 哪里又要裁员了?

上班前夕迎来大新闻&#xff0c;那就是Sora了&#xff0c;Sora是什么&#xff0c;有什么牛逼之处&#xff0c;怎么实现的&#xff0c;我们跟着官方文档透露出来的一点点信息&#xff0c;简单的捋一捋。 一、Sora是什么 官方给出的定义是&#xff1a;世界模拟器。这很明显有夸大…

js 多对象去重(多属性去重)

需求中发现后端可能没有处理重复数据&#xff0c;这个时候前段可以直接解决。 在 JavaScript 中&#xff0c;可以使用 Set 数据结构来进行多对象的去重。Set 是 ES6 新引入的集合类型&#xff0c;其特点是元素不会重复且无序。 下面是一个示例代码&#xff0c;展示如何通过 S…

three.js 物体下落动画(重力加速度)

效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><el-button click"loopFun"> 物体下落…

kubuntu 解决 kwallet 弹窗问题

问题 启动 kubuntu 后, 自动弹框要求验证 kwallet 的密码 查看本次启动中与 kwallet 有关的日志 $ journalctl -b | grep kwallet解决 开启 sddm/gdm 登录后自动解锁 kwallet 的功能 安装 kwallet-pam 模块 一般来说系统自带该模块 $ sudo apt install libpam-kwallet5 l…

机器学习基础(二)监督与非监督学习

导语&#xff1a;更深入地探讨监督学习和非监督学习的知识&#xff0c;重点关注它们的理论基础、常用算法及实际应用场景。 上一节我们深入探索机器学习的根本原理&#xff0c;包括基本概念、分类及如何通过构建预测模型来应用这些理论&#xff0c;详情可见&#xff1a; 机器学…

京东数据分析|京东销售数据怎么查|京东销售数据查询软件分享!

京东销售数据分析对商家来说具有多方面的重要作用&#xff0c;主要体现在以下几个方面&#xff1a; 市场趋势分析&#xff1a; 分析京东平台上的商品销量、销售额和价格走势等数据&#xff0c;可以帮助商家了解当前市场的整体需求趋势&#xff0c;以及不同品类的季节性变化、…

面向未来的全面预算管理,财务团队应具备的技能

当企业置身于当今这个瞬息万变的市场环境中时&#xff0c;每一次的数据分析和战略决策都至关重要。财务团队作为企业提升盈利能力和保持可持续发展的核心&#xff0c;不仅要适应不同的管理需求和不断变化的市场环境&#xff0c;还需要协助企业保持竞争优势和领先地位。经济世界…

「函数递归小课堂」~(C语言)

先赞后看&#xff0c;不足指正! 这将对我有很大的帮助&#xff01; 所属专栏&#xff1a;C语言知识 阿哇旭的主页&#xff1a;Awas-Home page 目录 引言 1. 什么是递归&#xff1f; 2. 递归的限制条件 3. 递归应用举例 3.1 求 n 的阶乘 3.2 图例演示 3.3 代码实现 4…

基于JAVA+SpringBoot+Vue的前后端分离的电影院售票管理运营平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 该系统研究背景聚焦于…

解密短视频上火爆的“私董会”现象

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 最近“私董会”一词再一次上了热门&#xff0c;先是一夜暴火的商业博主dada管培生翻车暴雷&#xff0c;后面是三言财经、互联网大V纷纷发表了自己的看法。 国内领先的私董会服务机构通常每年的收费都在3万元起步。…

Stable Diffusion系列(六):原理剖析——从文字到图片的神奇魔法(潜空间篇)

文章目录 LDM概述原理模型架构自编码器模型扩散模型条件引导模型图像生成过程 实验结果指标定义IS&#xff08;越大越好&#xff09;FID&#xff08;越小越好&#xff09; 训练成本与采样质量分析不带条件的图片生成基于文本的图片生成基于语义框的图片生成基于语义图的图片生成…

Open3D在点云上画直线

想在点云上做一些标识&#xff0c;发现画直线比较方便&#xff0c;下面是我画了一个三角形。可以根据自己的情况改变坐标画出不同的形状 pcd.translate(np.array([0,0,20])) points np.asarray(pcd.points) centroid points.mean(axis0) x1 length1[1] y1 centroid[1] z1…

virtualbox虚拟机运行中断,启动报错“获取 VirtualBox COM 对象失败”

文章目录 问题现象排查解决总结 问题现象 2月7日下午四点多&#xff0c;我已经休假了&#xff0c;某县的客户运维方打来电话&#xff0c;说平台挂了&#xff0c;无法访问客户是提供的一台Windows server机器部署平台&#xff0c;是使用virtualbox工具安装的CentOS7.9虚拟机和运…

Mysql事务原理与优化

概述 我们的数据库一般都会并发执行多个事务&#xff0c;多个事务可能会并发的对相同的一批数据进行增删改查操作&#xff0c;可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题&#xff0c;为了解决多事务并发问题&…

华为配置旁挂二层组网隧道转发示例

配置旁挂二层组网隧道转发示例 组网图形 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户通过WLAN接入网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff0c;不影响用户的业务使用。 组网需求 AC组…

【python学习篇1】python基本语法

目录 一、第一个python程序 二、基本语法&#xff0c;数据类型&#xff0c;字面量&#xff0c;循环语句等内容 2.1字面量 2.2注释 2.2.1单行注释 2.2.2多行注释 2.3变量 2.3.1认识变量 2.3.2查看数据类型 2.3.3数据类型转换 2.3.4字符串的三种定义方式 2.3.5字符串…

Flutter开发环境和打包流程

Flutter开发环境和打包流程 1.本地开发环境 1.1.安装flutter 官网安装flutter有2种方式&#xff0c;一种是下载flutter的sdk包&#xff0c;一种是VS Code直接安装&#xff0c;照着官网的安装flutter的流程走没有什么问题 1.2.安装Android Studio 去Android Studio的官网直…

若依不分离版本部署流程

一、分离与不分离的区别 参考博客&#xff1a;前后端分离与不分离的本质区别&#xff01;_前后端分离本质-CSDN博客 概念适用场景前后端不分离前端页面看到的效果都是由后端控制&#xff0c;由后端渲染页面或重定向适合纯网页应用前后端分离后端仅返回前端所需的数据&#xf…