#include <iostream>
using std::cout; using std::endl;
/*
合成、聚合复用原则:尽量使用合成聚合,尽量不要使用继承。
*/
class PhoneSoft
{
public:
virtual void run(){ }
virtual ~PhoneSoft(){ }
};
class GameSoft :public PhoneSoft
{
public:
void run()override
{
cout << "游戏" << endl;
}
};
class AdressList :public PhoneSoft
{
public:
void run()override
{
cout << "通讯录" << endl;
}
};
/*
这样把手机品牌和手机软件分开,无论想添加再添加几个手机品牌或者手机游戏,
都不会影响既有代码,完全符合开放封闭原则
*/
class PhoneBrand
{
public:
void setphonesoft(PhoneSoft *soft)
{
m_soft = soft;
}
void virtual run(){ }
virtual ~PhoneBrand()
{
}
protected:
PhoneSoft* m_soft;
};
class PhoneBrandN:public PhoneBrand
{
public:
void virtual run()override
{
m_soft->run();
}
};
class PhoneBrandM :public PhoneBrand
{
public:
void virtual run()override
{
m_soft->run();
}
};
int main()
{
PhoneBrand * phone = new PhoneBrandN;
PhoneSoft * soft = new GameSoft;
PhoneSoft *addrlist = new AdressList;
phone->setphonesoft(soft);
phone->run();
phone->setphonesoft(addrlist);
phone->run();
delete soft;
delete addrlist;
delete phone;
phone = new PhoneBrandM;
soft = new GameSoft;
addrlist = new AdressList;
phone->setphonesoft(soft);
phone->run();
phone->setphonesoft( addrlist);
phone->run();
delete phone;
delete soft;
delete addrlist;
return 0;
}
对于桥接模式我们可以认为实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。