码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-25 00:10:26      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

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

UML图:
技术分享

主要包括:

  1. Abstraction:定义了抽象部分的接口,操作一个实现部分对象的引用。
  2. RefinedAbstraction:继承自抽象部分的类。
  3. Implementor:实现部分的接口。
  4. ConcreteImplementor:实现了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;
}

执行输出:
技术分享


下面是一个具体的例子,看这个具体的例子可能好理解一些,摘自大话设计模式:

  1. Abstraction为Phone(手机)。
  2. RefinedAbstraction为Samsung(三星手机),Huawei(华为手机)。
  3. Implementor为Game(手机游戏)。
  4. 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;

}

执行输出:
技术分享

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

标签:

原文地址:http://blog.csdn.net/u012501459/article/details/46628055

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!