设计模式之桥接模式

在这里插入图片描述
该模式有点像建造者模式 不过又有区别

设计模式之桥接模式

支付方式选择

package com.example.设计模式.桥接模式.pay;

import com.example.设计模式.桥接模式.paymentmode.PayMy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;

/**
 * 抽象类 定义支付接口
 *
 * @Date:2022/4/12
 * @author: ZLF
 */

public abstract class Pay {

    protected Logger logger = LoggerFactory.getLogger(Pay.class);
    /**
     * 定义接口 这里主要要定义接口不然会报错找不到这个
     */
    protected PayMy payMy;

    public Pay(PayMy payMy) {
        this.payMy = payMy;
    }

    /**
     * 选择支付方法
     * @param uId
     * @param tradeId
     * @param amount
     * @return
     */
    public abstract String payBaoAndWechat(String uId, String tradeId, BigDecimal amount);
}

wx

package com.example.设计模式.桥接模式.pay;

import com.example.设计模式.桥接模式.paymentmode.PayMy;

import java.math.BigDecimal;

/**
 * @Date:2022/4/12
 * @author: ZLF
 */
public class WxPay extends Pay {
    public WxPay(PayMy payMy) {
        super(payMy);
    }

    @Override
    public String payBaoAndWechat(String uId, String tradeId, BigDecimal amount) {
        logger.info("模拟微信渠道⽀付划账开始。uId:{} tradeId:{} amount:{}",
                uId, tradeId, amount);
        // 安全校验
        boolean security = payMy.security(uId);
        logger.info("校验是否成功。security:{}", security);
        if (!security) {
            logger.info("模拟微信渠道⽀付划账拦截。uId:{} tradeId:{} amount: {}", uId, tradeId, amount);
            return "400";
        }
        logger.info("模拟微信渠道⽀付划账成功。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
        return "200";
    }
}

zfb

package com.example.设计模式.桥接模式.pay;

import com.example.设计模式.桥接模式.paymentmode.PayMy;

import java.math.BigDecimal;

/**
 * @Date:2022/4/12
 * @author: ZLF
 */
public class ZfbPay extends Pay {

    public ZfbPay(PayMy payMy) {
        super(payMy);
    }

    @Override
    public String payBaoAndWechat(String uId, String tradeId, BigDecimal amount) {
        logger.info("模拟支付宝渠道⽀付划账开始。uId:{} tradeId:{} amount:{}",
                uId, tradeId, amount);
        // 安全校验
        boolean security = payMy.security(uId);
        logger.info("校验是否成功。security:{}", security);
        if (!security) {
            logger.info("模拟支付宝渠道⽀付划账拦截。uId:{} tradeId:{} amount: {}", uId, tradeId, amount);
            return "400";
        }
        logger.info("模拟支付宝渠道⽀付划账成功。uId:{} tradeId:{} amount:{}", uId, tradeId, amount);
        return "200";
    }
}

定义实现方式接口

package com.example.设计模式.桥接模式.paymentmode;

/**
 * @Date:2022/4/12
 * @author: ZLF
 */
public interface PayMy {
    /**
     * 安全校验接口
     * @param uId
     * @return
     */
    boolean security(String uId);
}

模式一

package com.example.设计模式.桥接模式.paymentmode;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * @Date:2022/4/12
 * @author: ZLF
 */
public class Face implements PayMy {
    protected Logger logger = LoggerFactory.getLogger(Face.class);

    @Override
    public boolean security(String uId) {
        logger.info("人脸支付不安全");
        return false;
    }
}

模式二

package com.example.设计模式.桥接模式.paymentmode;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Date:2022/4/12
 * @author: ZLF
 */
public class Fingerprint implements PayMy {
    protected Logger logger = LoggerFactory.getLogger(Fingerprint.class);

    @Override
    public boolean security(String uId) {
        logger.info("指纹支付,据说世界上没有一模一样的指纹");
        return true;
    }
}

模式三

package com.example.设计模式.桥接模式.paymentmode;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Date:2022/4/12
 * @author: ZLF
 */
public class Phone implements PayMy {
    protected Logger logger = LoggerFactory.getLogger(Phone.class);

    @Override
    public boolean security(String uId) {
        logger.info("手机号码支付纯纯大冤种");
        return false;
    }
}

最后测试

编译看左边 最后方法调用实现了 桥接模式

package com.example.设计模式.桥接模式.test;

import com.example.设计模式.桥接模式.pay.WxPay;
import com.example.设计模式.桥接模式.pay.ZfbPay;
import com.example.设计模式.桥接模式.paymentmode.Fingerprint;
import com.example.设计模式.桥接模式.paymentmode.Phone;
import org.junit.Test;

import java.math.BigDecimal;

/**
 * @Date:2022/4/12
 * @author: ZLF
 */
public class PayTest {
    @Test
    public void test() {
        System.out.println("微信支付+电话号码");
        WxPay wxPay = new WxPay(new Phone());
        wxPay.payBaoAndWechat("wx——1", "001", new BigDecimal(11111111));
        System.out.println("支付宝支付+指纹");
        ZfbPay zfbPay = new ZfbPay(new Fingerprint());
        zfbPay.payBaoAndWechat("zfb-2", "002", new BigDecimal(22222222));
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值