刚简单并认真地看了适配器模式,赶紧把其原理勾勒出来,防止忘光光。
若A的Do无法直接使用C的方法DoC,构件适配器B。注意以下要点:
1.B继承自A,写覆盖函数Do(目的是调用B的方法);
2.B以C的对象c为构造函数的输入;
3.B的Do函数中使c调用DoC;
4.C c = new C;A a = new B(c);a->Do;
此时,执行的是B的Do,从而调用了DoC。给出编译通过的源码
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
virtual ~A()
{
};
virtual void Do()
{
cout << "Do By A;" << endl;
};
};
class C
{
public:
void DoC()
{
cout<<"Do By C;" << endl;
}
};
class B : public A
{
public:
B(C* c_In):c(c_In) {};
virtual ~B() {};
virtual void Do()
{
cout << "Transfer By Adapter;" << endl;
c->DoC();
}
private:
C* c;
};
void main()
{
C *c = new C;
A *a = new B(c);
a->Do();
delete c;
delete a;
system("pause");
}