桥接模式 Bridge Pattern

一、模式介绍

1.1、定义

将抽象与实现分离,使它们可以独立变化。另一种定义:一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。

通过组合关系来替代继承关系,避免继承层次的指数级爆炸,从而降低了抽象和实现这两个可变维度的耦合度。

1.2、优点

  1. 抽象与实现分离,扩展能力强
  2. 符合开闭原则
  3. 符合合成复用原则
  4. 其实现细节对客户透明

1.3、缺点

由于聚合关系建立在抽象层,要求开发者针对抽象化进行设计与编程,能正确地识别出系统中两个独立变化的维度,这增加了系统的理解与设计难度。

二、结构与实现

2.1、结构

  1. 抽象化角色(Abstraction):定义抽象类,并包含一个对实现化的引用
  2. 扩展抽象化角色(RefinedAbstraction):是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法
  3. 实现化角色(Implementor):定义实现化角色的接口,供扩展抽象化角色调用
  4. 具体实现化角色(ConcreteImplementor):给出实现化角色接口的具体实现
    在这里插入图片描述

2.2、实现

在这里插入图片描述

2.2.1、Abstraction
package com.erlang.bridge;

/**
 * @description: 抽象化角色
 * @author: erlang
 * @since: 2022-02-14 21:13
 */
public abstract class Abstraction {

    /**
     * 实现化角色
     */
    protected Implementor impl;

    protected Abstraction(Implementor impl) {
        this.impl = impl;
    }

    /**
     * 抽象化角色 方法
     */
    public abstract void operation();
}
2.2.2、RefinedAbstraction
package com.erlang.bridge;

/**
 * @description: 扩展抽象化角色
 * @author: erlang
 * @since: 2022-02-14 21:13
 */
public class RefinedAbstraction extends Abstraction {

    public RefinedAbstraction(Implementor imple) {
       super(imple);
    }

    @Override
    public void operation() {
        System.out.println("扩展抽象化角色 RefinedAbstraction 方法");
        impl.method();
    }
}
2.2.3、Implementor
package com.erlang.bridge;

/**
 * @description: 实现化角色
 * @author: erlang
 * @since: 2022-02-14 21:11
 */
public interface Implementor {
    /**
     * 业务方法
     */
    void method();
}
2.2.4、ConcreteImplementor
package com.erlang.bridge;

/**
 * @description: 具体实现化角色
 * @author: erlang
 * @since: 2022-02-14 21:11
 */
public class ConcreteImplementor implements Implementor {
    @Override
    public void method() {
        System.out.println("具体实现化角色 ConcreteImplementor 方法");
    }
}
2.2.5、BridgeClient
package com.erlang.bridge;

/**
 * @description: 桥接模式客户端
 * @author: erlang
 * @since: 2022-02-14 21:11
 */
public class BridgeClient {
    public static void main(String[] args) {
        Implementor imple = new ConcreteImplementor();
        Abstraction abs = new RefinedAbstraction(imple);
        abs.operation();
    }
}
2.2.6、 执行结果
扩展抽象化角色 RefinedAbstraction 方法
具体实现化角色 ConcreteImplementor 方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值