C++设计模式-桥接
来源:互联网 发布:笔记本怎么查看mac地址 编辑:程序博客网 时间:2024/05/01 14:07
定义
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。也叫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;
}
- 设计模式----工厂模式(c++)
- 【设计模式C++】工厂模式
- C++/设计模式
- 设计模式[C++]
- C和设计模式
- C语言-设计模式
- C语言-设计模式
- C语言-设计模式
- Object-C 设计模式
- 设计模式(C++)
- C语言设计模式
- C语言-设计模式
- Objective-c:设计模式
- 设计模式C C++
- c语言设计模式
- C设计模式
- 设计模式(C++)
- C++,算法,设计模式《转》
- GPRS常用指令
- 巧用AT指令做边界测试
- Android root权限
- Windows Azure平台简介(二):Windows Azure
- 有n个32位无符号整数,求其中异或之后结果最大的两个数
- C++设计模式-桥接
- js隐藏导航菜单
- 【转】进程共享变量#pragma data_seg用法
- json刚学的
- Access 直接查询 外部 SQL Server 表
- 详解C#正则表达式语法的相关规则
- 中国移动短信中心服务中心号码一览表
- 一个字形容自己“乱”
- 常用的C#正则表达式!