一、概述
- 桥接模式(Bridge Pattern):将实现和抽象放在两个不同的类的层次中,使两个层次可以独立改变
- 核心实现就是A类中含有B类接口,通过构造器传递B类的实现,这个B类就是设计的桥
- 在一些组合中,如果有每一个类都实现不同的服务可能出现笛卡尔积,而使用桥接模式就会非常简单
二、支付案例
- 支付宝、微信均有人脸识别、指纹识别、密码三种方式支付
IPayMode
是一个接口,往下有三种支付模式:刷脸支付、指纹支付、密码支付Pay
是一个抽象类,聚合了IPayMode
,往下有两种继承方式:微信支付、支付宝支付
public interface IPayMode {
boolean security(String uID);
}
public class PayFaceMode implements IPayMode {
@Override
public boolean security(String uID) {
System.out.println("使用人脸识别");
return true;
}
}
public abstract class Pay {
protected IPayMode payMode;
public Pay(IPayMode payMode) {
this.payMode = payMode;
}
public void setPayMode(IPayMode payMode) {
this.payMode = payMode;
}
public abstract boolean transfer(String uId, String tradeId, BigDecimal amount);
}
public class AliPay extends Pay {
public AliPay(IPayMode payMode) {
super(payMode);
}
@Override
public boolean transfer(String uId, String tradeId, BigDecimal amount) {
if (!payMode.security(uId)) {
System.out.println("当前支付宝账户不安全");
return false;
}
System.out.println("支付宝账户安全");
System.out.println(uId + " 转账给 " + tradeId + " " + amount + " 元");
return true;
}
}
public class Client {
public static void main(String[] args) {
WechatPay wechatPay = new WechatPay(new PayFingerprintMode());
wechatPay.transfer("1", "2", new BigDecimal("100"));
}
}
- 从桥接模式的实现形式来看,满足了单一职责和开闭原则,让每一部分内容都很清晰、易于维护和拓展。