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

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

Hello~大家龙年好!~

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

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

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


图还没画完,时间不够了,哈哈哈,明天完善

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

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

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

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

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

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

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

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

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

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

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

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

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

1.首先:定义一个接口

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

java 复制代码
/**
 *子模块: 高维炫彩眼镜支付服务
*/
public interface  GlassesPayService{
    //定义一个支付方法
    public void pay(GlassesPayRequest glassesPayRequest);
}

/**
 *此类定义请求的方法
*/
public class GlassesPayRequest{
    
}

2.定义抽象服务类

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

定义整体的支付逻辑

仔细看代码里面的解说!

java 复制代码
//实现接口,目的实现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的场景,不管重构还是锻炼自己都是挺爽的

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

4.定义工厂

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

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

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

java 复制代码
@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框架的基础上,采用模版方法,策略模式,工厂方法模式实现了我们子啊工作一个使用的场景!~

完结撒花!~

相关推荐
许嵩6611 小时前
IC 脚本之VIM 记录
linux·编辑器·vim
cxks-从新开始15 小时前
使用 md-editor-v3 开发自定义 Markdown 编辑器组件
编辑器
牙买加_小杨17 小时前
用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转这些功能
ide·vscode·编辑器
南郁17 小时前
06.VSCODE:备战大项目,CMake专项配置
ide·vscode·编辑器
哑巴湖小水怪1 天前
WPS宏编辑器开发,单元格内容变更自动触发事件
java·编辑器·wps
哟哟耶耶2 天前
vscode-相关自用插件(倒计时,时间显示,编码对齐,css等编码颜色,简体中文,git提交相关,vue项目)
ide·vscode·编辑器
CodeCraft Studio2 天前
【实用技能】ASP.NET Core:在同一个 Razor 视图中使用文档编辑器和查看器
编辑器·asp.net
dllmayday2 天前
VSCode 多工程联合调试
ide·vscode·编辑器
霖雨2 天前
使用Visual Studio Code 快速新建Net项目
java·ide·windows·vscode·编辑器
fll9802052 天前
配置修改Vim编辑器中TAB键的缩进长度
linux·编辑器·vim