主要解决
由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。
结构
- 抽象(Abstraction):该类持有一个对实现角色的引用以维护该对象,抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类(构造函数规定子类要传入一个实现角色)
- 修正抽象(RefineAbstraction): Abstraction的具体实现。对Abstraction的方法进行完善和扩展
- 实现(Implementor):定义实现维度的基本操作,提供给Abstraction使用。该类一般为接口或抽象类
- 具体实现(ConcreteImplementor):Implementor的具体实现
代码
//操作系统
class OS
{
public:
virtual void InstallOS_Imp() {}
};
class WindowOS: public OS
{
public:
void InstallOS_Imp() { cout<<"安装Window操作系统"<<endl; }
};
class LinuxOS: public OS
{
public:
void InstallOS_Imp() { cout<<"安装Linux操作系统"<<endl; }
};
class UnixOS: public OS
{
public:
void InstallOS_Imp() { cout<<"安装Unix操作系统"<<endl; }
};
//计算机
class Computer
{
public:
virtual void InstallOS(OS *os) {}
};
class DellComputer: public Computer
{
public:
void InstallOS(OS *os) { os->InstallOS_Imp(); }
};
class AppleComputer: public Computer
{
public:
void InstallOS(OS *os) { os->InstallOS_Imp(); }
};
class HPComputer: public Computer
{
public:
void InstallOS(OS *os) { os->InstallOS_Imp(); }
};
客户使用方式:
int main()
{
OS *os1 = new WindowOS();
OS *os2 = new LinuxOS();
Computer *computer1 = new AppleComputer();
computer1->InstallOS(os1);
computer1->InstallOS(os2);
}
参考
https://zhuanlan.zhihu.com/p/431714886
https://blog.csdn.net/leonardohaig/article/details/107732848