桥接模式原创
# 桥接模式
# 说明
桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。桥接模式是一种结构型设计模式,它基于类的最小设计原则,通过使用封装、聚合及集成等行为让不同类承担不同的职责。
它主要的特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。
# 场景
现在市面上有很多验证支付方式,同时也有很多接入商,比如: 微信、支付宝、银联,所提供的支付方式有很多,比如: 人脸识别、语音识别、密码识别、短信验证码识别 该场景下,如何设计代码让 不同厂商灵活使用验证方式呢?
# 创建验证方式接口
public interface IPayMode {
boolean verify(ModeModel modeModel);
}
1
2
3
4
5
2
3
4
5
# 支付方式辅助类,参数封装
public class ModeModel {
private String username;
private String password;
private String voice; // 语音算法解析
private String face;// 人脸算法解析
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getVoice() {
return voice;
}
public void setVoice(String voice) {
this.voice = voice;
}
public String getFace() {
return face;
}
public void setFace(String face) {
this.face = face;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 人脸识别方式
public class FacePayMode implements IPayMode{
@Override
public boolean verify(ModeModel modeModel) {
System.out.println(String.format("正在人脸识别 %s", modeModel.getFace()));
return true;
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 语音识别方式
public class YuYinPayMode implements IPayMode{
@Override
public boolean verify(ModeModel modeModel) {
System.out.println(String.format("正在语音识别 %s", modeModel.getVoice()));
return true;
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 密码识别方式
public class YuYinPayMode implements IPayMode{
@Override
public boolean verify(ModeModel modeModel) {
System.out.println(String.format("正在语音识别 %s", modeModel.getVoice()));
return true;
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 创建支付厂商父类
public abstract class Pay {
public IPayMode iPayMode;
public abstract void transfer(ModeModel modeModel);
/**
* 通过构造函数 传入具体使用的验证方式
* @param iPayMode
*/
public Pay(IPayMode iPayMode) {
this.iPayMode = iPayMode;
}
public IPayMode getiPayMode() {
return iPayMode;
}
public void setiPayMode(IPayMode iPayMode) {
this.iPayMode = iPayMode;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 微信
public class WxPay extends Pay{
public WxPay(IPayMode iPayMode) {
super(iPayMode);
}
/**
* 微信验证
* @param modeModel
*/
@Override
public void transfer(ModeModel modeModel) {
// 使用验证方式 通过构造函数传递
System.out.println("微信支付中");
//开始验证
iPayMode.verify(modeModel);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 支付宝
public class ZfbPay extends Pay{
public ZfbPay(IPayMode iPayMode) {
super(iPayMode);
}
/**
* 微信验证
* @param modeModel
*/
@Override
public void transfer(ModeModel modeModel) {
// 使用验证方式 通过构造函数传递
System.out.println("支付宝支付中");
// 开始验证
iPayMode.verify(modeModel);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 银联
public class YlPay extends Pay{
public YlPay(IPayMode iPayMode) {
super(iPayMode);
}
/**
* 微信验证
* @param modeModel
*/
@Override
public void transfer(ModeModel modeModel) {
// 使用验证方式 通过构造函数传递
System.out.println("银联支付中");
// 开始验证
iPayMode.verify(modeModel);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 测试
public class BridgeTest {
public static void main(String[] args) {
// 微信支付使用 人脸验证
Pay wxPay = new WxPay(new FacePayMode());
// 构建验证对象
ModeModel modeModel = new ModeModel();
modeModel.setFace("fdsfsdafasfj12313jh2912313jk13h1j");
wxPay.transfer(modeModel);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 测试结果
微信支付中
正在人脸识别 fdsfsdafasfj12313jh2912313jk13h1j
1
2
2
编辑 (opens new window)
上次更新: 2022/05/01, 19:42:49