桥接模式

一、什么是桥接模式

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使他们都可以独立的变化。它是一种对象结构型模式。
桥接模式是一种很实用的结构型设计模式,在软件开发时,如果某个类存在两个独立变化的维度,可以运用桥接模式将这两个维度分离出来,使两者可以独立拓展,让系统更加符合“单一职责原则”。

二、桥接模式场景案例

随着移动支付的蓬勃发展,为更方便的进行支付,越来越多的第三方支付平台应运而生,如微信、支付宝。假如我们现在需要开发一个第三方支付平台来承接支付业务,在面对多渠道(如微信、支付宝)、多方式(密码、指纹、人脸)融合使用时,如果每一次支付,每种渠道和方式都实现一个类,2 * 3 = 6需要开发好多相关类。而且随着业务的发展更多渠道和方式的接入,相关拓展类会呈现爆炸式的增长。为解决这一问题我们引入桥接模式!

三、桥接模式结构

桥接模式结构图.png
3.1、角色说明

Abstraction(抽象类):用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。
RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法。
Implementor(实现类接口):定义实现类的接口。
ConcreteImplementor(具体实现类):具体实现Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同实现。

3.2、桥接模式理解分析

理解桥接模式,需要重点理解如何将抽象化(Abstraction)和实现化(Implementation)脱耦,使得二者可以独立的变化。
1、抽象化:抽象化就是忽略一些信息,把不同的实体当成同样的实体对待。在面向对象中,将对象的共同性质抽取出来形成类的过程即为抽象化的过程。
2、实现化:针对抽象化给出的具体实现,就是实现化,抽象化与实现化是一对互逆的概念,实现化产生的对象比抽象化更具体,是对抽象化事物的进一步具体化的产物。
3、脱耦:脱耦就是将抽象化和实现化之间的耦合解脱开,或者说是将他们的强关联改换成弱关联,将两个角色之间的继承关系改为关联关系。桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化,这就是桥接模式的用意。

四、代码示例

4.1、支付渠道桥接抽象类
public abstract class AbstractPay {
    protected IPayWay payWay;
        public AbstractPay(IPayWay payWay) {
            this.payWay = payWay;
        }
    public abstract String transfer(String uId, String tradeId, Integer amount);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。