首页 > 其他分享 >技术成神之路:设计模式(十九)桥接模式

技术成神之路:设计模式(十九)桥接模式

时间:2024-09-30 11:50:22浏览次数:9  
标签:桥接 成神 模式 color 抽象类 设计模式 public 实现

介绍

桥接模式(Bridge Pattern)是一种结构型设计模式,通过将抽象部分与它的实现部分分离,使它们都能够独立地变化。它的核心思想是将接口与实现解耦,从而使得两者可以独立地变化。

1.定义


桥接模式将抽象部分与它的实现部分分离,使它们都可以独立地变化。

2. 主要作用


  • 解耦:桥接模式通过将抽象和实现分离,降低了系统的耦合度。
  • 扩展性:可以灵活地添加新的实现类和抽象类,而无需修改现有代码。
  • 减少类的数量:通过组合的方式,避免了大量的子类产生,降低了系统的复杂性。

3. 解决的问题


  • 类的数量急剧增加,导致管理和维护困难。
  • 修改一个实现类可能会影响多个子类,增加了系统的脆弱性。
  • 不同的实现类可能会在抽象类中被硬编码,缺乏灵活性。

4. 模式原理


包含角色:

  1. Abstraction(抽象类): 定义抽象类的接口,维护一个指向 Implementor 类型对象的指针。
  2. RefinedAbstraction(细化抽象类): 扩展抽象类,并实现具体业务逻辑。
  3. Implementor(实现类接口): 定义实现类的接口,不一定与抽象类的接口完全一致。
  4. ConcreteImplementor(具体实现类): 实现 Implementor 接口,并完成具体业务。

UML类图:

技术成神之路:设计模式(十九)桥接模式_抽象类

代码示例:

以图形绘制为例,展示如何使用桥接模式来分离图形(形状)与绘制方式(颜色)

// Implementor
interface Color {
    void applyColor();
}

// ConcreteImplementor
class RedColor implements Color {
    public void applyColor() {
        System.out.println("Red.");
    }
}

// ConcreteImplementor
class GreenColor implements Color {
    public void applyColor() {
        System.out.println("Green.");
    }
}

// Abstraction
abstract class Shape {
    protected Color color;

    public Shape(Color color) {
        this.color = color;
    }

    abstract void draw();
}

// RefinedAbstraction
class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    public void draw() {
        System.out.print("Circle filled with color ");
        color.applyColor();
    }
}

// RefinedAbstraction
class Square extends Shape {
    public Square(Color color) {
        super(color);
    }

    public void draw() {
        System.out.print("Square filled with color ");
        color.applyColor();
    }
}

调用

public class BridgePatternDemo {
    public static void main(String[] args) {
        Shape redCircle = new Circle(new RedColor());
        Shape greenSquare = new Square(new GreenColor());

        redCircle.draw();  
        greenSquare.draw();  
    }
}

打印输出

Circle filled with color Red.
Square filled with color Green.

我觉得桥接模式的含义就两个字 分离,就像上面定义讲的,部分分离,独立变化,了解这点就明白了桥接模式的核心意义。

桥接模式的应用在我们生活中也很常见,比如一个大公司有许多部门,他们相互独立,又存在联系,各司其职,共同组成了公司的架构,可想而知,如果一家公司不存在部分划分,你既是开发又是测试,既是老板又是财务,那么运行起来是多么混乱。

举一反三

Java 的 I/O 库使用了桥接模式。InputStreamOutputStream 是抽象类,定义了输入和输出的基本操作,而各种具体的实现类(如 FileInputStreamBufferedInputStream 等)则实现了这些操作。 ReaderWriter 类可以被视为实现类接口。而FileReaderFileWriter 则可以被视为具体实现类.

可以总结如下:

Abstraction: InputStream 和 OutputStream RefinedAbstraction: FileInputStream 和 FileOutputStream Implementor: Reader 和 Writer ConcreteImplementor: FileReader 和 FileWriter

5. 优缺点


优点

  • 灵活性:可以在运行时切换不同的实现。
  • 易于扩展:可以通过增加新类而不是修改现有类来扩展系统。
  • 降低了系统复杂性:通过组合而非继承减少了类的数量。

缺点

  • 增加复杂性:引入了额外的抽象层次,增加了系统的复杂性。
  • 理解难度:对于初学者来说,理解桥接模式可能有一定难度。

桥接模式使用的不多,需要合理设计抽象与实现的分离,初期可能会有较高的设计成本。要是你的目标是个架构师,这个还是必须要掌握的。

6. 应用场景


  • 当一个类存在多个独立维度的变化时,可以使用桥接模式将这些维度分离开。
  • 当系统中存在多个组合变化时,通过桥接模式可以避免类的数量急剧增加。
  • 需要将抽象部分与实现部分解耦时。

7. 总结


桥接模式是一个强大且灵活的设计模式,通过将抽象与实现分离,降低了系统的耦合度和复杂性。虽然引入了额外的抽象层,但在需要高度灵活性和可扩展性的场景中,它提供了一种优雅的解决方案。在实际开发中,合理使用桥接模式能够有效提升系统的可维护性和可扩展性。

标签:桥接,成神,模式,color,抽象类,设计模式,public,实现
From: https://blog.51cto.com/xaye/12152956

相关文章

  • 在面向对象编程中,感觉桥接和组合好像很像,他们有什么共性和差别呢
    1.相关链接最简单的桥接模式-CSDN博客最简单的理解组合模式_组合模式举例-CSDN博客 2.内容在面向对象编程中,桥接模式和组合模式确实有一些相似之处,但它们在设计理念和应用场景上存在显著的差异。以下是对这两种模式的共性和差别的详细分析:共性结构型设计模式:桥接模式和......
  • 设计模式之备忘录模式
    备忘录模式备忘录模式是一种行为设计模式,它允许保存和恢复对象的内部状态,而无需暴露该对象的实现细节。这种模式在实现撤销操作或是需要保存和恢复数据的场景中非常有用。核心组件备忘录模式主要包含三个角色:发起人(Originator):负责创建一个含有其当前内部状态的备忘录,并可以使......
  • Python 设计模式之工厂模式:灵活构建对象的利器
    在软件开发中,设计模式是解决常见问题的通用方案,能够提高代码的可维护性、可扩展性和可读性。其中,工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,将对象的创建和使用分离,使得代码更加灵活和可维护。在Python中,工厂模式同样有着广泛的应用。本文将深入探讨Python......
  • 设计模式之模板方法模式
    模板方法模式模板方法模式是一种行为型设计模式,它定义了一个操作中的算法的框架,并将一些步骤的执行延迟到子类中。通过这种方式,模板方法使得子类可以在不改变算法的结构的情况下,重定义算法中的某些特定步骤。核心组成:抽象类(AbstractClass):这个抽象类包含模板方法本身,同时也可......
  • 软件设计模式概述
    概述软件设计内容软件体系结构—宏观设计,模块软件设计模式—中间级别,类,接口,模块数据结构与算法—微观设计,方法是什么设计经验的总结七个常用原则单一职责原则就一个类而言,应该仅有一个引起他变化的原因为什么当一个类职责过多,一个职责的变化可能影响......
  • C++设计模式
    C++设计模式提供了一些常见的问题和解决方案,帮助我们写出更清晰、更高效、更容易维护的代码。1.单例模式:就像整形诊所里有一个特别的规定,全世界只能有一个人拥有某款独一无二的鼻子,其他人都不能复制。(确保一个类只有一个实例,并提供一个全局访问点。)classSingleton{priva......
  • 结构型设计模式详解与对比:优化你的系统设计
    结构型设计模式(StructuralDesignPatterns)主要关注类和对象的组合,以形成更大的结构。它们通过识别实体之间的关系,帮助设计师确保系统的各个部分能够协同工作。以下是几种常见的结构型设计模式及其详细介绍和对比:一,代理模式(ProxyPattern)用途:为另一个对象提供一个替身......
  • Java设计模式6 - 策略模式
    策略模式策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 策略模式的结构策略模式是对算法的包装,是把使用算法的责任和算法本身分开。策略模式通常是把一系列的算法包装......
  • Java设计模式5 - 原型模式
    原型模式原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意。 原型模式结构原型模式要求对象实现一个可以克隆机身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例......
  • 设计模式之迭代器模式
    迭代器模式迭代器模式(IteratorPattern)是一种行为设计模式,它提供了一种顺序访问集合对象中各个元素的方法,而不需要暴露该对象的内部表示。迭代器模式主要用来遍历集合,如列表、树、图等数据结构。目的迭代器模式的主要目的是将集合对象的遍历行为从集合对象中分离出来,使用一个独......