桥接模式(Bridge):将抽象部分与它的实现分离,使它们都能够独立的变化。
桥梁模式的设计思想是在软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化,以减少耦合。
UML类图:
模式说明:
Abstraction
抽象类,定义了一套使用和操作接口。内部维护了一个Implementor类对象,具体操作由Implementor类实现。
Implementor
实现类,定义了基本操作,由它的派生类去实现这些接口。
ConcreteImplementor
具体实现类,用以实现具体的操作。
基本代码:
基本代码:
/********************************************************************
filename: Bridge.h
created: 2013-01-25
author: firehood
purpose: firehood 学设计模式之---桥接模式
*********************************************************************/
#pragma once
#include <iostream>
using namespace std;
// 实现者
class Implementor
{
public:
Implementor(void){}
virtual ~Implementor(void){}
public:
virtual void operationImp() = 0;
};
// 抽象类
class Abstraction
{
public:
Abstraction(Implementor* pImp):m_pImp(pImp){}
virtual ~Abstraction(void){}
public:
virtual void operation()
{
m_pImp->operationImp();
}
protected:
Implementor* m_pImp;
};
// 具体实现者A
class ConcreteImplementorA : public Implementor
{
public:
ConcreteImplementorA(void){}
virtual ~ConcreteImplementorA(void){}
public:
void operationImp()
{
cout<<"执行方法A"<<endl;
}
};
// 具体实现者B
class ConcreteImplementorB : public Implementor
{
public:
ConcreteImplementorB(void){}
virtual ~ConcreteImplementorB(void){}
public:
void operationImp()
{
cout<<"执行方法B"<<endl;
}
};
客户端调用代码:
#include "Bridge.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
cout<<"*************************************"<<endl;
cout<<"firehood 学设计模式之---桥接模式"<<endl;
cout<<"*************************************"<<endl;
ConcreteImplementorA impA;
Abstraction abs(&impA);
abs.operation();
system("pause");
return 0;
}
执行结果:
*************************************
firehood 学设计模式之---桥接模式
*************************************
执行方法A
请按任意键继续. . .
firehood 学设计模式之---桥接模式
*************************************
执行方法A
请按任意键继续. . .