目錄
C++設(shè)計(jì)模式-橋接(Bridge)
一、意圖
二、適用性
三、結(jié)構(gòu)
四、參與者
五、代碼
C++設(shè)計(jì)模式-橋接(Bridge)
一、意圖
將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。
二、適用性
- 你不希望在抽象和它的實(shí)現(xiàn)部分之間有一個(gè)固定的綁定關(guān)系。例如這種情況可能是因?yàn)?,在程序運(yùn)行時(shí)刻實(shí)現(xiàn)部分應(yīng)可以被選擇或者切換。
- 類(lèi)的抽象以及它的實(shí)現(xiàn)都應(yīng)該可以通過(guò)生成子類(lèi)的方法加以擴(kuò)充。這時(shí)Bridge模式使你可以對(duì)不同的抽象接口和實(shí)現(xiàn)部分進(jìn)行組合,并分別對(duì)它們進(jìn)行擴(kuò)充。
- 對(duì)一個(gè)抽象的實(shí)現(xiàn)部分的修改應(yīng)對(duì)客戶不產(chǎn)生影響,即客戶的代碼不必重新編譯。
- (C++)你想對(duì)客戶完全隱藏抽象的實(shí)現(xiàn)部分。在C++中,類(lèi)的表示在類(lèi)接口中是可見(jiàn)的。
- 有許多類(lèi)要生成。這樣一種類(lèi)層次結(jié)構(gòu)說(shuō)明你必須將一個(gè)對(duì)象分解成兩個(gè)部分。Rumbaugh稱這種類(lèi)層次結(jié)構(gòu)為“嵌套的普化”(nested generalizations )。
- 你想在多個(gè)對(duì)象間共享實(shí)現(xiàn)(可能使用引用計(jì)數(shù)),但同時(shí)要求客戶并不知道這一點(diǎn)。一個(gè)簡(jiǎn)單的例子便是Coplien的String類(lèi)[Cop92],在這個(gè)類(lèi)中多個(gè)對(duì)象可以共享同一個(gè)字符串表示(S tringRep)。
三、結(jié)構(gòu)
?
四、參與者
- Abstraction
????????定義抽象類(lèi)的接口。
????????維護(hù)一個(gè)指向Implementor類(lèi)型對(duì)象的指針。
- RefinedAbstraction
????????擴(kuò)充由Abstraction定義的接口。
- Implementor
????????定義實(shí)現(xiàn)類(lèi)的接口,該接口不一定要與Abstraction的接口完全一致;事實(shí)上這兩個(gè)接口可以完全不同。一般來(lái)講,Implementor接口僅提供基本操作,而Abstraction則定義了基本這些基本操作的較高層次的操作。
-
ConcreteImplementor文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-728368.html
????????實(shí)現(xiàn)了Implementor接口并定義它的具體實(shí)現(xiàn)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-728368.html
五、代碼
#include<iostream>
using namespace std;
class Implementor {
public:
virtual void OperationImp() = 0;
};
class ConcreteImplementorA : public Implementor {
public:
virtual void OperationImp() {
cout << "Concrete Implementor A" << endl;
}
};
class ConcreteImplementorB : public Implementor {
public:
virtual void OperationImp() {
cout << "Concrete Implementor B" << endl;
}
};
class Abstraction {
public:
virtual void Operation() = 0;
};
class RefinedAbstraction : public Abstraction {
public:
RefinedAbstraction(Implementor* TempImplementor) {
this->implementor = TempImplementor;
}
void Operation() {
implementor->OperationImp();
}
private:
Implementor* implementor;
};
int main() {
Implementor* implementorA = new ConcreteImplementorA;
Abstraction* abstractionA = new RefinedAbstraction(implementorA);
abstractionA->Operation();
Implementor* implementorB = new ConcreteImplementorB;
Abstraction* abstractionB = new RefinedAbstraction(implementorB);
abstractionB->Operation();
return 0;
}
到了這里,關(guān)于C++設(shè)計(jì)模式-橋接(Bridge)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!