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

news2025/1/16 20:59:46

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

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定义了整体的支付逻辑(也就是我们上面所说的大框架)
    @Override
     public 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{
    //实现方法
    @Override
    public void doPay(GlassesPayRequest glassesPayRequest){
        //AliPay  支付逻辑
        
    }
}
微信策略服务
@Service
public  class  GlassesWeCahtPayService  extends AbstractGlassesPayService{
    //实现方法
    @Override
    public void doPay(GlassesPayRequest glassesPayRequest){
         //WeChat  支付逻辑
    }
}
央行卡策略服务
@Service
public  class  GlassesBankPayService  extends AbstractGlassesPayService{
    //实现方法
    @Override
    public void doPay(GlassesPayRequest glassesPayRequest){
         //央行卡  支付逻辑
    }
}

4.定义工厂

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

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

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

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

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

完结撒花!~

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

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

相关文章

【STC8A8K64D4开发板】第2-12讲:数码管显示

第2-12讲&#xff1a;数码管显示 学习目的了解数码管分类、工作原理及驱动电路的设计。掌握STC8A8K64D4系列单片机驱动8位共阴数码管的动态显示的软件设计。 数码管概述 数码管是一种常用的显示设备&#xff0c;他有着价格便宜、使用简单的特点&#xff0c;在各个领域被广泛的…

学生用台灯多少瓦比较合适呢?五大优质护眼台灯无广实测推荐

护眼台灯的出现成为众多宝妈人群青睐的对象&#xff0c;都希望能借助它的力量来保护孩子的视力健康。这类台灯不仅拥有柔和而舒适的光线&#xff0c;而且能有效防蓝光和眩光&#xff0c;提供恰到好处的色温&#xff0c;为孩子们创造一个理想的学习环境。然而&#xff0c;市面上…

【ArcGIS微课1000例】0105:三维模型转体模型(导入sketchup转多面体为例)

文章目录 一、实验概述二、三维模型转多面体三、加载多面体数据四、注意事项一、实验概述 ArcGIS可以借助【导入3D文件】工具支持主流的三维模型导入。支持 3D Studio Max (.3ds)、VRML and GeoVRML 2.0 (.wrl)、SketchUp 6.0 (.skp)、OpenFlight 15.8 (.flt)、Collaborative …

【知识整理】简述 Code Review - 代码审查

一、Code Review 简述 为保证上线代码质量&#xff0c;经研究决定0412版本起实行Code Review 。具体操作方式为组织 review 会。提出的优化点需立即执行更改&#xff0c;Review会要求给出调整方式方法。同时为了确保项目或迭代版本的时间&#xff0c;请各开发同学提前做好时间…

Unity2023.1.19_ShaderGraph节点说明以及使用技巧

Unity2023.1.19_ShaderGraph节点说明以及使用技巧 目录 Unity2023.1.19_ShaderGraph节点说明以及使用技巧 1. 快捷键CtrlG完成和UE蓝图使用快捷键C一样的蓝图分组注释效果&#xff1a; 2. Tiling And Offset&#xff1a; 3. 以下是两组URP材质渲染的效果对比&#xff1a; 4…

大学生考试搜题用什么软件?学生党都在用的八款搜题工具来了 #经验分享#经验分享#经验分享

人工智能技术的发展正逐渐改变着我们的生活&#xff0c;学习如何运用这些技术将成为大学生的必备素养。 1.颐博查题 这是一个网站 在线搜题、题目答案分享网站。是我用过最好用的搜题类网站,还有小程序、公众号,用起来十分方便,想用哪个就用哪个。而且每天都可以免费使用。 …

【力扣 - 二叉树的中序遍历】

题目描述 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 提示&#xff1a; 树中节点数目在范围 [0, 100] 内 -100 < Node.val < 100方法一&#xff1a;递归 思路与算法 首先我们需要了解什么是二叉树的中序遍历&#xff1a;按照访问左子树——…

适用于预算少企业的网络组网方案

在中小企业的日常运营中&#xff0c;建立稳定高效的网络连接至关重要。无论是进行内部协作、访问云应用、处理大量数据还是与客户进行沟通&#xff0c;都需要一个可靠的网络基础设施。然而&#xff0c;由于预算有限和资源限制&#xff0c;中小企业在构建适合自身需求的网络环境…

java面试题之redis篇

1.redis 中的数据类型有哪些 随着 Redis 版本的更新&#xff0c;后面又支持了四种数据类型&#xff1a; BitMap&#xff08;2.2 版新增&#xff09;、HyperLogLog&#xff08;2.8 版新增&#xff09;、GEO&#xff08;3.2 版新增&#xff09;、Stream&#xff08;5.0 版新增&am…

php实现讯飞星火大模型3.5

前期准备 vscode下载安装好 composer下载安装好 php环境安装好 &#xff08;以上可以自行网上查阅资料&#xff09; 开始实现 1.注册讯飞星火用户&#xff0c;获取token使用 讯飞星火认知大模型-AI大语言模型-星火大模型-科大讯飞 2.修改对应php文件中的key等 可以参考…

Vue3自定义全局指令批量注册

指令封装代码&#xff1a; import type { App } from "vue";const content {mounted(el : any, binding : any) {console.dir(binding.value);el.remove();} };const operate {mounted(el : any, binding : any) {console.dir(binding.value);el.remove();} };cons…

第十篇:node处理404和服务器错误

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录</

PostgreSQL教程(四):高级特性

一、简介 在之前的章节里我们已经涉及了使用SQL在PostgreSQL中存储和访问数据的基础知识。现在我们将要讨论SQL中一些更高级的特性&#xff0c;这些特性有助于简化管理和防止数据丢失或损坏。最后&#xff0c;我们还将介绍一些PostgreSQL扩展。 本章有时将引用教程&#xff0…

有事休假店铺无人看守怎么办?智能远程视频监控系统保卫店铺安全

在春节期间&#xff0c;很多自营店主也得到了久违的假期&#xff0c;虽然很多店主都是长期在店铺中看守&#xff0c;但遇到春节这样的日子&#xff0c;多数人还是选择回乡休假。面对店主休假或有事不能管理店铺时&#xff0c;传统的监控虽然可以做到单一的监控&#xff0c;却仍…

【Vuforia+Unity】AR01实现单张多张图片识别产生对应数字内容

1.官网注册 Home | Engine Developer Portal 2.下载插件SDK&#xff0c;导入Unity 3.官网创建数据库上传图片&#xff0c;官网处理成数据 下载好导入Unity&#xff01; 下载好导入Unity&#xff01; 下载好导入Unity&#xff01; 下载好导入Unity&#xff01; 4.在Unity设…

白银交易新手指南:怎样选择可靠的现货交易平台?

在投资市场上&#xff0c;白银作为一种贵金属&#xff0c;具有较高的投资价值和风险防范功能。对于白银交易新手来说&#xff0c;选择一个可靠的现货交易平台是至关重要的。那么&#xff0c;如何挑选一个适合自己的现货交易平台呢&#xff1f; 1. 平台资质 一个正规的现货交易…

微信小程序-表单提交和校验

一、使用vant组件生成如下页面 二、前端代码如下 <form bindsubmit"submitForm"><view class"cell-group"><van-cell-group><van-field value"{{ title }}" label"商品名称" placeholder"请输入商品名称&qu…

不再烦恼!微信自动回复,消息秒回利器!

在当今社交网络高度发达的时代&#xff0c;微信已成为人们日常沟通不可或缺的重要工具。然而&#xff0c;随着微信好友数量的增加&#xff0c;消息的频繁和多样化也让人感到压力倍增。 针对这一现状&#xff0c;微信管理系统应运而生&#xff0c;为用户提供了一种便捷而高效的…

胶管生产中可自动控制外径的测径仪 你心动吗?

摘要&#xff1a;在线测径仪是测控一体的精密仪器&#xff0c;PID闭环控制方法&#xff0c;提升产品外径质量&#xff0c;可以说连测带控才是真绝色&#xff0c;为胶管品质负责。 关键词&#xff1a;胶管测径仪,测径仪,在线测径仪,外径测量仪,直径测量仪 引言 胶管应用领域众多…

云数据库 Redis 性能深度评测(阿里云、华为云、腾讯云、百度智能云)

在当今的云服务市场中&#xff0c;阿里云、腾讯云、华为云和百度智能云都是领先的云服务提供商&#xff0c;他们都提供了全套的云数据库服务&#xff0c;其中 Redis属于RDS 之后第二被广泛应用的服务&#xff0c;本次测试旨在深入比较这四家云服务巨头在Redis云数据库性能方面的…