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

这篇具有很好参考价值的文章主要介绍了谈谈:你在工作中用到的设计模式!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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定义了整体的支付逻辑(也就是我们上面所说的大框架)
    @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框架的基础上,采用模版方法,策略模式,工厂方法模式实现了我们子啊工作一个使用的场景!~

完结撒花!~文章来源地址https://www.toymoban.com/news/detail-829078.html

到了这里,关于谈谈:你在工作中用到的设计模式!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 工作中用到的数通、安全的查询、工具、文档链接

    感觉有用的就会补充进去,有推荐可以发评论区 华为序列号查询 https://support.huawei.com/enterprise/ecareWechat 华为设备信息速查 https://info.support.huawei.com/info-finder/search-center/zh/enterprise/switch 华为数通产品解决方案案例 https://forum.huawei.com/enterprise/zh/thread/634081358710194176 华为交换机命名

    2024年02月04日
    浏览(40)
  • java Spring中使用到的设计模式

    单例模式(Singleton Pattern)是java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一对象的方式,可以直接

    2024年02月16日
    浏览(62)
  • 【开源与项目实战:开源实战】85 | 开源实战四(中):剖析Spring框架中用来支持扩展的两种设计模式

    上一节课中,我们学习了 Spring 框架背后蕴藏的一些经典设计思想,比如约定优于配置、低侵入松耦合、模块化轻量级等等。我们可以将这些设计思想借鉴到其他框架开发中,在大的设计层面提高框架的代码质量。这也是我们在专栏中讲解这部分内容的原因。 除了上一节课中

    2024年02月11日
    浏览(48)
  • 什么是 Spring 框架?使用 Spring 框架的好处是什么?Spring 框架中用到了哪些设计模式?列举一些重要的Spring模块?

    Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。 Spring 官网 :https://spring.io/ Spring 框架指的是 Spring Framework ,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。         这些 模块 是:核心容器、数据访问/集成,、Web、

    2024年02月13日
    浏览(44)
  • Java设计模式之代理模式--经纪人的工作

    本文主要讲述 代理模式 ,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。 代理模式是23种设计模式中 结构型模式 的一种,它的核心是通过代理类来完成其他对象的访问,降低访问者和被访问者的耦合度,也对功能进行了增强。 每个艺人

    2024年02月09日
    浏览(42)
  • 设计模式学习笔记 - 设计模式与范式 -行为型:8.状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

    本章学习状态模式。在实际的开发中,状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。从这一点上看,它有点像我们之前讲到的组合模式。 状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。不过,状态机的实现方式

    2024年04月10日
    浏览(45)
  • 嵌入式ARM设计编程(三) 处理器工作模式

    文章和代码已归档至【Github仓库:hardware-tutorial】,需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 (1) 通过实验掌握学会使用msr/mrs 指令实现ARM 处理器工作模式的切换,观察不同模式下的寄存器,加深对CPU 结构的理解; (2) 通过实验掌握ld 中如何使

    2024年02月03日
    浏览(59)
  • 3D项目中用到的一些算法

    判断点是否在多边形内部(冬奥) (1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。 (2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。 (3)引射线法:从目标点出发引一

    2024年02月08日
    浏览(39)
  • git常见使用 --实习中用到的

    1.正常的上传和提交 2.git rebase 当存在多个commit的提交节点时,统一成一次提交。 3.版本回退 git reset --hard :把head指向之前的某次提交。hard是强制回退,不保存中间提交的内容。 git revert -n 版本号 : 不会丢失现有版本的提交记录,生成一个新版本 4.查看分支+切换分支 git b

    2024年02月07日
    浏览(36)
  • 收集项目中用到的工具函数

    收集项目中常用的工具函数,以备后用,使用 TS 编写。 document.execCommand 已被弃用,但是想要兼容微信浏览器、兼容 IOS 设备还不得不使用它。`。 还有一个兼容性问题,在微信浏览器中,IOS 设备如果想要复制到剪切板,需要有一个点击操作,比如点击一个按钮。再将一个需要

    2024年02月01日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包