有域名 空間如何建網(wǎng)站溫州seo顧問
橋接模式:
將抽象部分和它的實現(xiàn)部分相分離開來,以使它們可以單獨地變化。
UML圖:
主要包括:
- Abstraction:定義了抽象部分的接口,操作一個實現(xiàn)部分對象的引用。
- RefinedAbstraction:繼承自抽象部分的類。
- Implementor:實現(xiàn)部分的接口。
- ConcreteImplementor:實現(xiàn)了Implementor定義的接口的具體類。
C++代碼如下:
#include <iostream>using namespace std;class Implementor
{public:virtual void operationImpl()=0;
};class ConcreteImplementorA:public Implementor
{public:void operationImpl(){cout<<"ConcreteImplementorA::operationImpl"<<endl;}};class ConcreteImplementorB:public Implementor
{public:void operationImpl(){cout<<"ConcreteImplementorB::operationImpl"<<endl;}};class Abstraction
{public:virtual void operation()=0;void setImplementor(Implementor * i){impl=i;}Implementor * getImplementor(){return impl;}protected:Implementor * impl;
};class RefinedAbstraction:public Abstraction
{public:void operation(){impl->operationImpl();}
};int main()
{cout<<"橋接模式例子"<<endl;Abstraction * ab=new RefinedAbstraction();Implementor * cia=new ConcreteImplementorA();ab->setImplementor(cia);ab->operation();Implementor * cib=new ConcreteImplementorB();ab->setImplementor(cib);ab->operation();delete cia;delete cib;delete ab;return 0;
}
執(zhí)行輸出:
下面是一個具體的例子,看這個具體的例子可能好理解一些,摘自大話設(shè)計模式:
- Abstraction為Phone(手機)。
- RefinedAbstraction為Samsung(三星手機),Huawei(華為手機)。
- Implementor為Game(手機游戲)。
- ConcreteImplementor為NeedForSpeed(極品飛車),QQGame(QQ游戲),FruitNinjia(水果忍者)。
UML類圖為:
C++代碼:
#include <iostream>using namespace std;class Game
{public:virtual void play()=0;
};class NeedForSpeed :public Game
{public:virtual void play(){cout<<"need for speed play"<<endl;}
};class QQGame :public Game
{public:virtual void play(){cout<<"QQGame play"<<endl;}
};class FruitNinjia:public Game
{public:virtual void play(){cout<<"Fruit Ninjia play"<<endl;}
};class Phone
{public:virtual void run()=0;void setGame(Game *g){ game=g;} Game * getGame(){return game;}protected:Game *game;
};class Samsung:public Phone
{public:virtual void run(){cout<<"Samsung :";game->play();}
};class HuaWei:public Phone
{public:virtual void run(){cout<<"HuaWei :";game->play();}};int main()
{cout<<"橋接模式真實的例子,不同的手機品牌和手機游戲"<<endl;Phone *samsung=new Samsung();Phone *huawei=new HuaWei();Game * needForSpeed=new NeedForSpeed();Game * qqGame=new QQGame();Game * fruit=new FruitNinjia();samsung->setGame(qqGame);samsung->run();huawei->setGame(needForSpeed);huawei->run();samsung->setGame(fruit);samsung->run();delete samsung;delete huawei;delete needForSpeed;delete qqGame;delete fruit;return 0;}
執(zhí)行輸出: