掌握C++桥接模式:实现抽象与实现的分离

需积分: 16 0 下载量 124 浏览量 更新于2024-11-20 收藏 3KB 7Z 举报
资源摘要信息:"C++设计模式-结构型模式-桥接模式" 桥接模式(Bridge Pattern)是23种常用的设计模式之一,属于结构型模式。它主要用于将抽象化与实现化解耦,使得二者可以独立地变化。在桥接模式中,抽象化部分与实现部分可以分别独立地扩展,而不会影响到对方。 ### 桥接模式的关键概念: - **抽象部分**:通常是指一个拥有实现部分引用的接口。它对高层来说是透明的,但封装了实现部分的具体行为。 - **实现部分**:是一个拥有多种具体实现的接口,这些实现可以独立于抽象化部分而变化。 - **具体抽象部分**:是对抽象部分的实现,它持有实现部分的引用。 - **具体实现部分**:是实现部分接口的具体实现,它独立于抽象部分的其它实现。 ### 桥接模式的结构: 1. **Abstraction**:定义抽象部分的接口,维护一个Implementor类型的对象,用于定义所使用的具体实现对象的类型。 2. **RefinedAbstraction**:扩展Abstraction,改变和扩展抽象部分的行为。 3. **Implementor**:定义实现部分的接口,但不具体实现,由ConcreteImplementor来完成。 4. **ConcreteImplementor**:具体实现Implementor接口,实现具体的操作。 ### C++实现桥接模式的示例代码: ```cpp #include <iostream> // Implementor class DrawingAPI { public: virtual void drawCircle(float x, float y, float radius) = 0; }; // ConcreteImplementorA class DrawingAPI1 : public DrawingAPI { public: void drawCircle(float x, float y, float radius) override { std::cout << "API1.circle at " << x << ',' << y << " radius " << radius << std::endl; } }; // ConcreteImplementorB class DrawingAPI2 : public DrawingAPI { public: void drawCircle(float x, float y, float radius) override { std::cout << "API2.circle at " << x << ',' << y << " radius " << radius << std::endl; } }; // Abstraction class Shape { protected: DrawingAPI* drawingAPI; public: Shape(DrawingAPI* drawingAPI) { this->drawingAPI = drawingAPI; } virtual void draw() = 0; virtual void resizeByPercentage(float percentage) = 0; }; // RefinedAbstraction class CircleShape : public Shape { private: float x, y, radius; public: CircleShape(float x, float y, float radius, DrawingAPI* drawingAPI) : Shape(drawingAPI), x(x), y(y), radius(radius) {} void draw() override { drawingAPI->drawCircle(x, y, radius); } void resizeByPercentage(float percentage) override { radius *= percentage; } }; int main() { Shape* shape1 = new CircleShape(1, 2, 3, new DrawingAPI1()); shape1->draw(); shape1->resizeByPercentage(0.5f); delete shape1; Shape* shape2 = new CircleShape(3, 4, 5, new DrawingAPI2()); shape2->draw(); shape2->resizeByPercentage(2.0f); delete shape2; return 0; } ``` ### 桥接模式的适用场景: - 当一个抽象可能有多个实现,这些实现可以独立变化时。 - 当抽象的实现应该独立于抽象的接口变化时。 - 当抽象和其实现的继承层次结构应该独立扩展时。 ### 桥接模式的优点: - 分离抽象与实现,降低它们之间的耦合度。 - 提高系统的可扩展性。 - 实现细节对客户透明。 ### 桥接模式的缺点: - 桥接模式增加了系统的复杂度,可能需要理解两个类层次结构。 ### 桥接模式与其他设计模式的关联: - **适配器模式**(Adapter)通常用于转换接口,而桥接模式是用于将抽象与实现分离。 - **策略模式**(Strategy)允许在运行时改变对象的行为,桥接模式则是对抽象和实现进行解耦,使它们可以独立变化。 在软件工程中,桥接模式的应用广泛,尤其是在需要解耦抽象与实现的场景下。通过分离接口与实现,我们可以独立地对抽象层和实现层进行扩展,从而提供更多的灵活性。这种模式特别适用于那些抽象和实现之间需要独立变化的系统架构设计。