结构型模式-4.桥接模式(Bridge Pattern)

 2024-07-29    0 条评论    68 浏览

设计模式

桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。这种模式通过组合的方式,将多个维度的变化分离开来,使得系统更加灵活。

桥接模式的结构

在桥接模式中,有两个关键角色:

  1. 抽象部分(Abstraction):定义抽象类的接口,它维护一个指向实现部分的对象的引用。

  2. 实现部分(Implementor):定义实现类的接口,这个接口不一定和抽象部分的接口完全一致,它提供基本操作,而抽象部分基于这些基本操作定义出更高层次的操作。

桥接模式的优势

  • 解耦合:将抽象部分与实现部分分离,可以独立地变化。
  • 扩展性:可以方便地扩展新的抽象部分或实现部分,而不对原有的系统进行修改。

示例代码(Java)

假设我们要实现一个简单的桥接模式,用于绘制不同形状(如圆形和矩形)的不同颜色(如红色和蓝色)。

步骤1:定义实现部分接口

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

// Concrete Implementor 1
class RedColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying red color");
    }
}

// Concrete Implementor 2
class BlueColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying blue color");
    }
}

步骤2:定义抽象部分接口

// Abstraction class
abstract class Shape {
    protected Color color;

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

    abstract void applyColor();
}

// Refined Abstraction 1
class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

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

// Refined Abstraction 2
class Rectangle extends Shape {
    public Rectangle(Color color) {
        super(color);
    }

    @Override
    void applyColor() {
        System.out.print("Rectangle filled with color ");
        color.applyColor();
    }
}

步骤3:使用桥接模式创建对象并调用

public class BridgePatternExample {
    public static void main(String[] args) {
        Color red = new RedColor();
        Color blue = new BlueColor();

        Shape circle = new Circle(red);
        Shape rectangle = new Rectangle(blue);

        circle.applyColor();    // 输出:Circle filled with color Applying red color
        rectangle.applyColor(); // 输出:Rectangle filled with color Applying blue color
    }
}

在这个例子中,Shape 是抽象部分,它依赖于 Color 接口作为实现部分。CircleRectangle 是具体的形状,它们通过组合方式与不同的颜色(RedColorBlueColor)关联起来,实现了不同形状和颜色的组合。

桥接模式使得我们可以独立地修改形状和颜色的实现部分,而不需要修改抽象部分的代码,从而符合开闭原则和单一职责原则。