当我们使用别人的一组类时,很可能这一组类在编写上是毫不相干的。虽然它们在现实的概念中是有关系的。而且这些类里面可能有一些方法是用的同样形式的函数,正好是我们经常要用到的。那么如果在使用这些类的时候原封不动的用,如果是需要取得实例的指针之后,调用相应的函数,则必须要自己做判断类型。但是可以用添加接口的方式来实现编写更加容易一些。
//目标:为已经写好的不相干类添加接口。
//方法:将原类再封装一次,使其具有原先的行为和数据同时具有接口。
class T1
{
int i;
public:
void Set(int I){i=I;};
void Show()
{
cout<<"this is T1:"<<i<<endl;
};
};
class T2
{
int i;
public:
void Set(int I){i=I*2;};
void Show()
{
cout<<"This is T2:"<<i<<endl;
};
};
//T1 和 T2是两个不相干的类,但是有相同形式的成员函数.
//定义一个接口类
class InterfaceT
{
public:
virtual void Set(int)=0;
virtual void Show()=0;
virtual ~InterfaceT(){};
};
//把原始的类用接口封装
class PackT1:virtual public InterfaceT,T1
{
public:
void Set(int I)
{
T1::Set(I);
};
void Show(){
T1::Show();
};
};
class PackT2:virtual public InterfaceT,T2
{
public:
void Set(int I)
{
T2::Set(I);
};
void Show(){
T2::Show();
};
};
//之后可以用PackT1和PackT2类生成实例,它们具有原先T1和T2类行为数据的同时,可以用接口指针访问.
例如:
PackT1 t1;
PackT2 t2;
InterfaceT* It;
It=&t1;
It->Set(5);
It->Show();
It=&t2;
It->Show();