结构型模式-桥接模式

发布时间 2023-11-10 11:59:03作者: Qt小罗

1 什么是桥接模式

桥接模式(Bridge Pattern)是一种用于将抽象部分与它的实现部分分离的设计模式,使它们可以独立地变化。桥接模式通过组合而不是继承的方式来实现两个或多个独立变化的维度,从而减少类之间的耦合性。
在桥接模式中,存在两种角色:抽象部分(Abstraction)和实现部分(Implementor)。抽象部分定义了高层次的抽象接口,而实现部分则定义了具体实现的接口。通过将抽象部分和实现部分分离,可以使它们可以独立地扩展和变化。

2 举个例子

以下是一个简单的桥接模式示例:假设我们要设计一个绘制图形的系统,其中可以绘制不同颜色的图形(如圆形、矩形等)。我们使用桥接模式来分离形状和颜色,让它们可以独立地变化。
首先,我们定义抽象部分Shape和实现部分Color:

// 抽象部分
class Shape {
public:
    virtual void draw() = 0;
};

// 实现部分
class Color {
public:
    virtual std::string fill() = 0;
};

然后,我们创建具体的图形(如圆形、矩形)和颜色(如红色、绿色):

// 具体图形实现
class Circle : public Shape {
public:
    Circle(Color* color) : color(color) {}

    void draw() {
        std::cout << "Drawing Circle with color " << color->fill() << std::endl;
    }

private:
    Color* color;
};

class Rectangle : public Shape {
public:
    Rectangle(Color* color) : color(color) {}

    void draw() {
        std::cout << "Drawing Rectangle with color " << color->fill() << std::endl;
    }

private:
    Color* color;
};

// 具体颜色实现
class Red : public Color {
public:
    std::string fill() {
        return "Red";
    }
};

class Green : public Color {
public:
    std::string fill() {
        return "Green";
    }
};

客户端代码可以这样使用桥接模式:

int main() {
    Color* red = new Red();
    Color* green = new Green();

    Shape* circle = new Circle(red);
    Shape* rectangle = new Rectangle(green);

    circle->draw();
    rectangle->draw();

    delete red;
    delete green;
    delete circle;
    delete rectangle;

    return 0;
}

在上面的例子中,Shape 类代表图形,Color 类代表颜色。Circle 和 Rectangle 是具体的图形类,它们通过组合不同的颜色实现;Red 和 Green 是具体的颜色类。通过桥接模式,我们实现了图形和颜色之间的解耦,使它们可以独立地变化和扩展。

3 总结

通过桥接模式,我们避免了多继承的复杂性,并将抽象部分和实现部分分离,提高了系统的灵活性和可扩展性。