我是靠谱客的博主 冷静悟空,最近开发中收集的这篇文章主要介绍设计模式之桥接模式详解设计模式之桥接模式详解一、什么是桥接模式二、桥接模式的应用场景三、桥接模式的角色组成四、桥接模式通用写法示例五、桥接模式优缺点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

设计模式之桥接模式详解

文章目录

  • 设计模式之桥接模式详解
  • 一、什么是桥接模式
  • 二、桥接模式的应用场景
  • 三、桥接模式的角色组成
  • 四、桥接模式通用写法示例
  • 五、桥接模式优缺点

一、什么是桥接模式

桥接模式(Bridge Pattern) 也称为桥梁模式、接口模式或者柄体模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式。桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。但又类似于多重继承方案,但是多重继承方案往往违背了类的单一职责原则,其复用性较差,桥接模式是比多重继承更好的替代方案。桥接模式的核心在于解耦抽象和实现。

二、桥接模式的应用场景

当一个类内部具备两种或多种变化维度时,使用桥接模式可以解耦这些变化的维度,使高层代码架构稳定。桥接模式适用于以下几种业务场景:

  1. 在抽象和具体实现之间需要增加更多的灵活性的场景
  2. 一个类存在两个或多个独立变化的维度,而这两个或多个维度都需要独立进行扩展
  3. 不希望使用继承,或因为多层继承导致系统类的个数剧增

桥接模式的一个常用场景就是为了替换继承。我们知道继承有很多优点,比如抽象,封装,多态等,父类封装共性,子类实现特性。继承可以很好地帮助我们实现代码复用(封装)的功能,但是同时,这也是继承的一大缺点。因为父类拥有的方法,子类也会继承得到,无论子类是否需要。这说明了继承具备强侵入性(父类代码侵入子类),同时会导致子类臃肿。因此,在设计模式中,有一个原则为,优先使用组合/聚合的方式,而不是继承。

三、桥接模式的角色组成

  • 抽象(Abstraction): 该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现,抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象);
  • 修正抽象(RefinedAbstraction): Abstraction的具体实现,对Abstraction的方法进行完善和扩展;
  • 实现(Implementor): 确定实现维度的基本操作,提供给Abstraction使用。该类一般为接口或者抽象类;
  • 具体实现(ConcreteImplementor): Implementor的具体实现;

四、桥接模式通用写法示例

创建抽象Abstraction:

/**
 * 抽象 Abstraction 
 */
public abstract class Abstraction {

    protected IImplementor mImplementor;

    public Abstraction(IImplementor implementor) {
        this.mImplementor = implementor;
    }

    public void operation() {
        this.mImplementor.operationImpl();
    }
    
}

创建修正抽象角色RefinedAbstraction:

/**
 * 修正抽象 RefinedAbstraction
 */
public class RefinedAbstraction extends Abstraction {

    public RefinedAbstraction(IImplementor implementor) {
        super(implementor);
    }

    @Override
    public void operation() {
        super.operation();
        System.out.println("refined operation");
    }

}

创建实现角色Implementor:

public interface IImplementor {

    void operationImpl();

}

创建具体实现角色ConcreteImplementorA:

public class ConcreteImplementorA implements IImplementor {
    public void operationImpl() {
        System.out.println("I'm ConcreteImplementor A");
    }
}

编写测试类

public class Test {

    public static void main(String[] args) {
        // 实现角色A
        IImplementor imp = new ConcreteImplementorA();
        // 抽象角色,聚合实现
        Abstraction abs = new RefinedAbstraction(imp);
        // 执行操作
        abs.operation();
    }

}

代码测试,控制台输出:
在这里插入图片描述

五、桥接模式优缺点

  • 优点
    • 分离抽象部分及具体实现部分
    • 提高了系统的扩展性
    • 符合开闭原则、合成复用原则
  • 缺点
    • 增加了系统的理解与设计难度
    • 需要正确地识别系统中两个独立变化的维度

最后

以上就是冷静悟空为你收集整理的设计模式之桥接模式详解设计模式之桥接模式详解一、什么是桥接模式二、桥接模式的应用场景三、桥接模式的角色组成四、桥接模式通用写法示例五、桥接模式优缺点的全部内容,希望文章能够帮你解决设计模式之桥接模式详解设计模式之桥接模式详解一、什么是桥接模式二、桥接模式的应用场景三、桥接模式的角色组成四、桥接模式通用写法示例五、桥接模式优缺点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部