桥接模式

桥接模式属于结构型模式的一种。

桥接模式的定义颇为玄乎。其主要目的是将抽象部分与实现部分分离,使它们可以独立变化。简单地来说,桥接模式通过引入一个抽象层和具体实现层之间的桥梁,来减少二者之间的耦合度。

桥接模式是为了避免直接继承带来的子类爆炸。

桥接模式通过分离一个抽象接口和它的实现部分,使得设计可以按两个维度进行独立扩展。

在某些场景下,当类的数量成对数增加,导致系统变得复杂时,使用桥接模式可以减少类的数量。

在现实生活中类比,挂式空调与空调遥控器。如果将空调开关,调温度等操作都放在空调上,会麻烦很多。将空调与遥控器分开,如果发现遥控器有问题,只需修遥控器就好了,不用去拆空调了。

桥接模式可以将庞杂类拆分为几个类层次结构,这样,修改任意一个类层次结构,不会影响到其他类层次结构。

桥接模式通常有以下组成部分

  • 抽象类:定义了高层接口,持有一个对实现部分的引用。这个抽象类通常提供一些操作,调用实现类的方法。
  • 扩展抽象类:是抽象类的具体子类,扩展了抽象类的功能。可以有多个不同的实现,通过组合不同的实现和扩展来满足需求。
  • 实现接口:定义了实现部分的接口,通常不需要与抽象类相同,可以与抽象类相对独立,关注具体的实现。
  • 具体实现类:实现了实现接口的具体类,负责提供具体的功能和逻辑

使用桥接模式体现图形库中使用不同颜色绘制不同的形状。

1、实现类接口

// 实现类接口
interface Color {
    String fill();
}

2、具体实现类

// 具体实现类
class Red implements Color {
    public String fill() {
        return "Red";
    }
}

class Blue implements Color {
    public String fill() {
        return "Blue";
    }
}

3、抽象类

// 抽象类
abstract class Shape {
    protected Color color;

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

    abstract void draw();
}

4、扩展抽象类

// 扩展抽象类
class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    public void draw() {
        System.out.println("Drawing a Circle in " + color.fill());
    }
}

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

    public void draw() {
        System.out.println("Drawing a Square in " + color.fill());
    }
}

5、客户端

// 客户端
public class Main {
    public static void main(String[] args) {
        Shape redCircle = new Circle(new Red());
        Shape blueSquare = new Square(new Blue());

        redCircle.draw(); // 输出: Drawing a Circle in Red
        blueSquare.draw(); // 输出: Drawing a Square in Blue
    }
}

桥接模式的优缺点

优点:

  • 解耦:桥接模式将抽象和实现分开,便于独立扩展。
  • 提高灵活性:增加新的实现或抽象类时,不会影响现有的代码。
  • 避免类爆炸:通过组合,避免创建大量的子类,减少了系统的复杂性。
  • 抽象部分专注于处理高层逻辑,实现部分处理平台细节。

缺点:

  • 增加复杂性:引入了额外的接口和类,初期可能增加理解和实现的难度。
  • 不适合简单场景:如果系统结构简单,使用桥接模式可能会显得过于复杂。

桥接模式提供的设计思想值得借鉴,不要过度使用继承,而是优先拆分某些部件,使用组合的方式来扩展功能。

桥接模式适用于那些需要在多个维度上灵活扩展的场景。对于开发大型应用时,桥接模式大有裨益。

设计模式不但是一种对类进行组织的方式,还能用于沟通意图和解决问题。

深渊不会因为你的恐惧而消失。-- 烟沙九洲

 
 
posted @ 2024-11-27 20:46  烟沙九洲  阅读(19)  评论(0编辑  收藏  举报  来源