设计模式之十八:桥接模式(Bridge)

桥接模式:
将抽象部分和它的实现部分相分离开来,以使它们能够单独地变化。

UML图:
这里写图片描写叙述

主要包含:

  1. Abstraction:定义了抽象部分的接口。操作一个实现部分对象的引用。

  2. RefinedAbstraction:继承自抽象部分的类。
  3. Implementor:实现部分的接口。
  4. ConcreteImplementor:实现了Implementor定义的接口的详细类。

C++代码例如以下:

#include using namespace std;class Implementor
{public:virtual void operationImpl()=0;
};class ConcreteImplementorA:public Implementor
{public:void operationImpl(){cout<<"ConcreteImplementorA::operationImpl"<public Implementor
{public:void operationImpl(){cout<<"ConcreteImplementorB::operationImpl"<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<<"桥接模式样例"<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;
}

运行输出:
这里写图片描写叙述


以下是一个详细的样例,看这个详细的样例可能好理解一些,摘自大话设计模式:

  1. Abstraction为Phone(手机)。
  2. RefinedAbstraction为Samsung(三星手机)。Huawei(华为手机)。
  3. Implementor为Game(手机游戏)。
  4. ConcreteImplementor为NeedForSpeed(极品飞车)。QQGame(QQ游戏),FruitNinjia(水果忍者)。

UML类图为:
这里写图片描写叙述

C++代码:

#include using namespace std;class Game
{public:virtual void play()=0;
};class NeedForSpeed :public Game
{public:virtual void play(){cout<<"need for speed play"<class QQGame :public Game
{public:virtual void play(){cout<<"QQGame play"<class FruitNinjia:public Game
{public:virtual void play(){cout<<"Fruit Ninjia play"<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<<"桥接模式真实的样例,不同的手机品牌和手机游戏"<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;}

运行输出:
这里写图片描写叙述

转载于:https://www.cnblogs.com/yxysuanfa/p/7256958.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部