C++设计模式-桥接

定义

桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。也叫Handle
结构图
理解
1.       Abstraction 是对外提供接口的抽象类,由客户端调用。它聚合了一个指向接口实现基类Implementor 的指针。
2.       Implementor 是实现类的基类。它与Abstraction 的接口不一定相同。一般来说,Implementor 提供基本操作,Abstraction 定义了基于基本操作的更高层次操作。
 
要点
1.       桥接模式用来解决一个模块两个维度(抽象和实现)的变化。一个维度提供抽象接口功能(Abstraction );另一个维度是抽象接口功能的实现方式也在变化(Implementor )。举例,网球游戏和羽毛球游戏是两个不同游戏;同一种游戏在PSP 平台和在WII 平台上的实现方式不同。
2.       桥接模式与适配器(Adapter )模式的区别。适配器模式使两个完全不同的接口实现兼容,是设计后的行为;桥接模式是设计之初就考虑到了,目的是抽象接口和实现部分可以独立的变化。
 
应用
ACE 中,ACE_Reactor 就是桥接模式的应用。利用Bridge 模式,多路复用select 可以很容易实现UNIX Windows 跨平台应用。
源码中,网球游戏和羽毛球游戏是两个不同游戏(即抽象);同一种游戏在PSP 平台和在WII 平台上的实现方式不同。
 
源码
#include <iostream>
#include <string>
#include "../Singleton/Singleton.h"
using namespace std;
 
// 具体实现 . Implementor
class CGameImpl
{
public :
    CGameImpl () {};
    virtual ~CGameImpl(){};
 
    virtual void PlayImpl() = 0;
};
 
class CPSPGameImpl : public CGameImpl
{
public :
    virtual ~CPSPGameImpl(){};
 
    virtual void PlayImpl()
    {
        cout << "   play on psp…" << endl;
    };
};
 
class CWIIGameImpl : public CGameImpl
{
public :
    virtual ~CWIIGameImpl(){};
 
    virtual void PlayImpl()
    {
        cout << "   play on wii…" << endl;
    };
};
 
// 抽象接口 . Abstraction
class CGame
{
public :
    CGame(CGameImpl* pGameImpl)
        : m_pGameImpl(pGameImpl)
    {
    };
    virtual ~CGame() {};
 
    virtual void Play()
    {
        m_pGameImpl->PlayImpl();
    };
 
protected :
    CGameImpl* m_pGameImpl;
};
 
class CTennisGame : public CGame
{
public :
    CTennisGame(CGameImpl* pGameImpl)
        : CGame(pGameImpl)
    {};
    virtual ~CTennisGame() {};
 
    void Play()
    {
        cout << "play tennis game" << endl;
        m_pGameImpl->PlayImpl();
    };
};
 
class CBadmintonGame : public CGame
{
public :
    virtual void Play()
    {
        cout << "play badminton game" << endl;
    }
};
 
int main()
{
    // WII 上实现网球游戏
    CGameImpl* pGameImpl = new CWIIGameImpl;
    CGame* pGame = new CTennisGame(pGameImpl);
    pGame->Play();
 
    delete pGameImpl;
    delete pGame;
 
    system("pause");
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值