ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式--桥接模式】

2021-12-03 21:05:05  阅读:145  来源: 互联网

标签:uId tradeId 桥接 payMode -- 支付 logger 设计模式 public


提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

我们可能看了很多讲设计模式的书籍,看后既忘无法将它用到实际的业务场景中去,这个系列的文章将结合具体场景分析各种模式的使用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、桥接模式的使用场景?

示例:结合实际经验来说,我们常见的一种场景(支付场景)目前支付三方平台将支付宝、微信等集中起来提供给商家,同时支持人脸指纹密码等多种支付方式。抽象来看就是多支付平台与多支付方式的一种组合使用。

二、具体思路

1.新手实现

代码如下(示例):

// 使用微信支付
if(1==payType) {
if(1==payMode)
}else if(2==payMode){
}else if(3==payMode){
}
// 支付宝支付
if(2==payType) {
if(1==payMode)
}else if(2==payMode){
}else if(3==payMode){
}

类似上面典型的if……else这样的代码。分析不难发现实将支付平台和支付模式耦合在了一起,那么我们的目标就是解耦并通过组合的方式将多种平台和多种支付模式组合起来使用。

2.桥接模式

我们把支付类型和支付模式分类,通过抽象类依赖实现类的方式将桥接:
在这里插入图片描述

类实现和代码如下:

// 支付方式接口
public interface IPayMode {

    boolean security(String uId);

}

public class PayCypher implements IPayMode{

    protected Logger logger = LoggerFactory.getLogger(PayCypher.class);

    public boolean security(String uId) {
        logger.info("密码支付,风控校验环境安全");
        return true;
    }

}

public class PayFaceMode implements IPayMode{

    protected Logger logger = LoggerFactory.getLogger(PayCypher.class);

    public boolean security(String uId) {
        logger.info("人脸支付,风控校验脸部识别");
        return true;
    }

}

public class PayFingerprintMode implements IPayMode{

    protected Logger logger = LoggerFactory.getLogger(PayCypher.class);

    public boolean security(String uId) {
        logger.info("指纹支付,风控校验指纹信息");
        return true;
    }

}

抽象类中定义支付类型
public abstract class Pay {

    protected Logger logger = LoggerFactory.getLogger(Pay.class);

    protected IPayMode payMode;

    public Pay(IPayMode payMode) {
        this.payMode = payMode;
    }

    public abstract String transfer(String uId, String tradeId, BigDecimal amount);

}

public class ZfbPay extends Pay {

    public ZfbPay(IPayMode payMode) {
        super(payMode);
    }

    public String transfer(String uId, String tradeId, BigDecimal amount) {
        logger.info("模拟支付宝渠道支付划账开始。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
        boolean security = payMode.security(uId);
        logger.info("模拟支付宝渠道支付风控校验。uId:{} tradeId:{} security:{}", uId, tradeId, security);
        if (!security) {
            logger.info("模拟支付宝渠道支付划账拦截。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
            return "0001";
        }
        logger.info("模拟支付宝渠道支付划账成功。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
        return "0000";
    }

}

总结

:以上就是桥接模式的核心思想。将耦合的两部分拆出来,将接口与抽象通过组合的形式桥接到一起。这样通过接口具体实现类选择性使用不同的类方法。

标签:uId,tradeId,桥接,payMode,--,支付,logger,设计模式,public
来源: https://blog.csdn.net/weixin_43846880/article/details/121706420

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有