桥接模式是一种很实用的结构型设计模式。如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合单一职责原则。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。桥接模式用一种巧妙的方式处理多层继承存在的问题。桥接模式采用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。
桥接模式定义如下:桥接模式(Bridge Pattern):将抽象部分与其实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
为了展示一个使用桥接设计模式的示例,设计一个系统,它能够在不同的操作系统(Linux、Windows、MacOS)上显示不同类型的图像(PNG、JPG、JPEG)。在这个示例中,操作系统将作为抽象部分(Abstraction),而图像类型将作为实现部分(Implementation)。
实现部分(Implementation)
首先,定义一个图像显示接口和几个具体的图像类型实现。
// Image.h
#pragma once
#include <string>
class Image {
public:
virtual ~Image() {
}
virtual void display() const = 0;
};
class PNGImage : public Image {
public:
void display() const override {
std::cout << "Displaying PNG image\n";
}
}