一篇好文章:https://blog.csdn.net/u012581604/article/details/72887029
如果A和B的关系是组合关系或者是关联关系,B的变化形式很多而且对A的影响很大,这种情况使用桥接模式。
桥接模式我理解为"海纳百川"。
class OS
{
public:
virtual void show() = 0;
};
class Linux :public OS
{
};
class Ubuntu : public Linux
{
public:
void show() override
{
cout << "Linux OS:Ubuntu" << endl;
}
};
class Windows :public OS
{
};
class Win10 :public Windows
{
public:
void show() override
{
cout << "Windows OS:Win10" << endl;
}
};
class Win8 :public Windows
{
public:
void show() override
{
cout << "Windows OS:Win8" << endl;
}
};
class Mac :public OS
{
};
class Mac10 :public Mac
{
public:
void show() override
{
cout << "Mac OS:Mac10" << endl;
}
};
class Computer
{
public:
virtual void setOS(OS* os) = 0;
};
class ThinkPad :public Computer
{
};
class E570 :public ThinkPad
{
public:
void setOS(OS* os) override
{
m_os = os;
m_os->show();
}
public:
OS* m_os;
};
class T480 :public ThinkPad
{
public:
void setOS(OS* os) override
{
m_os = os;
m_os->show();
}
public:
OS* m_os;
};
class Apple :public Computer
{
};
class MacPro :public Apple
{
public:
void setOS(OS* os) override
{
m_os = os;
m_os->show();
}
public:
OS* m_os;
};
class Lenovo :public Computer
{
};
class MX250 :public Lenovo
{
public:
void setOS(OS* os) override
{
m_os = os;
m_os->show();
}
public:
OS* m_os;
};
int main()
{
Computer* oneComputer = new E570();
OS* oneOS = new Ubuntu();
OS* twoOS = new Win8();
OS* threeOS = new Mac10();
oneComputer->setOS(oneOS);
oneComputer->setOS(twoOS);
oneComputer->setOS(threeOS);
delete oneOS;
delete twoOS;
delete threeOS;
delete oneComputer;
}