設計模式學習(橋接模式)
阿新 • • 發佈:2018-12-19
一.設計意圖:
將抽象部分與它的實現部分分離,將他們都可以獨立地變化。
手機有很多牌子且在不斷變換,但是App應用也會不斷增多。所以程式要讓抽象部分(手機)與實現部分(App)分類,獨自變換。我們就已這個例子來介紹橋接模式。
二.例子:
1.首先我們建立實現部分的基類
AbstractApp.h
class AbstractApp
{
public:
AbstractApp();
virtual ~AbstractApp();
virtual void showApp() = 0;
};
AbstractApp.cpp
AbstractApp::AbstractApp()
{
}
AbstractApp::~AbstractApp()
{
}
2.然後我們建立抽象部分的基類
AbstractPhone.h
class AbstractPhone
{
public:
AbstractPhone();
virtual ~AbstractPhone();
virtual void UseApp() = 0;
};
AbstractPhone.cpp
AbstractPhone::AbstractPhone() { } AbstractPhone::~AbstractPhone() { }
3.實現抽象部分
Phone.h
class Phone : public AbstractPhone
{
public:
Phone(AbstractApp* app);
void UseApp();
AbstractApp *app;
};
Phone.cpp
Phone::Phone(AbstractApp* app)
{
this->app = app;
}
void Phone::UseApp()
{
app->showApp();
}
4.實現部分
qq.h
class QQ : public AbstractApp { public: QQ(); void showApp(); };
qq.cpp
QQ::QQ()
{
}
void QQ::showApp()
{
qDebug() << "It is qq" << endl;
}
wechat.h
class WeChat : public AbstractApp
{
public:
WeChat();
void showApp();
};
wechat.cpp
WeChat::WeChat()
{
}
void WeChat::showApp()
{
qDebug() << "It is wechat" << endl;
}
我們最後來使用它們
int main()
{
AbstractApp* app = new QQ();
AbstractPhone* p = new Phone(app);
p->UseApp();
return 0;
}
結果
It is qq
三.結論:
橋接模式是由抽象介面,抽象實現,實現者,實現者實現。
優點:
1.分離抽象介面及其實現部分。提高了比繼承更好的解決方案。
缺點:
1.橋接模式的引入會增加系統的理解與設計難度,由於聚合關聯關係建立在抽象層,要求開發者針對抽象進行設計與程式設計。
四.應用場景:
1、如果一個系統需要在構件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態的繼承聯絡,通過橋接模式可以使它們在抽象層建立一個關聯關係。
2、對於那些不希望使用繼承或因為多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用。
3、一個類存在兩個獨立變化的維度,且這兩個維度都需要進行擴充套件。