为已经编写好的不相干类添加接口

类别:编程语言 点击:0 评论:0 推荐:

       当我们使用别人的一组类时,很可能这一组类在编写上是毫不相干的。虽然它们在现实的概念中是有关系的。而且这些类里面可能有一些方法是用的同样形式的函数,正好是我们经常要用到的。那么如果在使用这些类的时候原封不动的用,如果是需要取得实例的指针之后,调用相应的函数,则必须要自己做判断类型。但是可以用添加接口的方式来实现编写更加容易一些。

//目标:为已经写好的不相干类添加接口。
//方法:将原类再封装一次,使其具有原先的行为和数据同时具有接口。

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();

本文地址:http://com.8s8s.com/it/it22724.htm