当抽象与实现需要分离时,我们可以用桥接模式。抽象部分是开放的,是用来进行对象之间交互的,所以其重点在于接口定义。实现部分可以是隐秘的,是比较细节的。两者分开之后,是可以做到自身变化不影响对方的。
以下代码定义了一个实现类,它要求子类实现OperationImpl函数。
#include <iostream>
using namespace std;
class Implementor
{
public:
virtual void OperationImpl()=0;
virtual ~Implementor(){}
};
以下代码定义了具体实现类,它实现了OperationImpl函数。
class ContreteImplementor:public Implementor
{
public:
void OperationImpl()
{
cout<<__PRETTY_FUNCTION__<<endl;
}
};
以下代码定义了一个抽象类,它要求子类实现Operation函数。
class Abstraction
{
protected:
Implementor* m_pAction;
public:
Abstraction(Implementor* action):m_pAction(action){}
virtual void Operation()=0;
virtual ~Abstraction(){}
};
以下代码定义了一个抽象的子类,它利用实现类对象实现了Operation函数。
class RefinedAbstraction:public Abstraction
{
public:
RefinedAbstraction(Implementor* action):Abstraction(action){}
void Operation()
{
cout<<__PRETTY_FUNCTION__<<"->";
m_pAction->OperationImpl();
}
};
以下代码演示了桥接模式,实现类对象先被建立,抽象类用其建立自身对象,然后调用抽象接口,实现则由实现类决定。
int main(void){
Implementor* implementor = new ContreteImplementor();
Abstraction* abstraction = new RefinedAbstraction(implementor);
abstraction->Operation();
delete abstraction;
delete implementor;
return 0;
}
输出
virtual void RefinedAbstraction::Operation()->virtual void ContreteImplementor::OperationImpl()
网友评论