桥接模式目的是将抽象部分与实现想分离,允许各自独立地变化。
考虑一个抽象有多个实现,通常采用的子类继承的实现方法使得抽象与实现固定在一起,难以独立的进行修改和扩充,桥接模式则提供了灵活的解决方案。具体办法是抽象类定义了接口,同时声明一个实现类指针作为成员变量,实现类则给出了具体的实现方法。例如有一个基本的抽象窗口类,提供了基本的操作接口(绘制,改变大小等)同时有一个实现类指针作为成员变量,一个实现类给出了不同的实现版本。桥接模式的本质在于将一个对象分为两部分,一部分提供接口,一部分提供实现,实现部分的修改并不影响客户端的代码。实例代码如下:
class WindowImp {
public:
virtual void Print(){ printf("WindowImp\n"); }
};
class XWindowImp : public WindowImp {
public:
void Print() { printf("XWindowImp \n"); }
};
class Window {
public:
Window (){ _windowImp=new WindowImp; };
void setWindowImp(WindowImp* pWindow){ if(_windowImp) delete _windowImp; _windowImp=pWindow; };
virtual void Print() { _windowImp->Print(); };
private:
WindowImp* _windowImp;
};
int _tmain(int argc, _TCHAR* argv[])
{
Window w;
w.Print();
w.setWindowImp(new XWindowImp);
w.Print();
getchar();
return 0;
}