作用:
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
class Abstraction
{
public:
Abstraction(Implementor* pImplementor);
virtual ~Abstraction();
void Operation();
protected:
Implementor* m_pImplementor;
};
// 为实现Abstraction 定义的抽象基类,定义了实现的接口函数
class Implementor
{
public:
Implementor(){}
virtual ~Implementor(){}
virtual void OperationImpl() = 0;
};
// 继承自Implementor,是Implem
class ConcreateImplementorA
: public Implementor
{
public:
ConcreateImplementorA(){}
virtual ~ConcreateImplementorA(){}
virtual void OperationImpl();
};
// 继承自Implementor,是Implementor的不同实现之一
class ConcreateImplementorB
: public Implementor
{
public:
ConcreateImplementorB(){}
virtual ~ConcreateImplementorB(){}
virtual void OperationImpl();
};
void ConcreateImplementorA::OperationImpl()
{
std::cout << "Implementation by ConcreateImplementorA/n";
}
void ConcreateImplementorB::OperationImpl()
{
std::cout << "Implementation by ConcreateImplementorB/n";
}
Abstraction::Abstraction(Implementor* pImplementor)
: m_pImplementor(pImplementor)
{
}
Abstraction::~Abstraction()
{
delete m_pImplementor;
m_pImplementor = NULL;
}
void Abstraction::Operation()
{
m_pImplementor->OperationImpl();
}
int main()
{
ConcreateImplementorA *pImplA = new ConcreateImplementorA();
Abstraction *pAbstraction1 = new Abstraction(pImplA);
pAbstraction1->Operation();
ConcreateImplementorB *pImplB = new ConcreateImplementorB();
Abstraction *pAbstraction2 = new Abstraction(pImplB);
pAbstraction2->Operation();
delete pAbstraction1;
delete pAbstraction2;
system("pause");
return 0;
}