1、目標類Target定義
#ifndef TARGET_H
#define TARGET_H
class Target
{
public:
Target();
Target(char* name);
~Target();
virtual char* getName();
private:
char* sname;
char* sRes;
};
#endif
2、目標類Target實現
#include <string.h>
#include "Target.h"
#define STR_TARGET " Target: "
Target::Target(char* name)
{
sRes = NULL;
if(name != NULL)
{
sname = new char[strlen(name) + 1];
strcpy(sname, name);
}
else
{
sname = NULL;
}
}
Target::~Target()
{
if(sname != NULL)
{
delete[] sname;
sname = NULL;
}
if(sRes != NULL)
{
delete[] sRes;
sRes = NULL;
}
}
char* Target::getName()
{
if(sRes != NULL)
{
delete[] sRes;
sRes = NULL;
}
int len = strlen(sname) + strlen(STR_TARGET);
sRes = new char[len + 1];
strcpy(sRes,STR_TARGET);
strcat(sRes,sname);
return sRes;
}
3、需適配類Adaptee定義
#ifndef ADAPTEE_H
#define ADAPTEE_H
class Adaptee
{
public:
Adaptee();
Adaptee(char*);
~Adaptee();
char* getName();
private:
char* sname;
char* sRes;
};
#endif
4、需適配類Adaptee實現
#include <string.h>
#include "Adaptee.h"
#define STR_ADAPTEE " Adaptee: "
Adaptee::Adaptee(char* name)
{
if(name != NULL)
{
sname = new char[strlen(name) + 1];
strcpy(sname,name);
}
else
{
sname = NULL;
}
sRes = NULL;
}
Adaptee::~Adaptee()
{
if(sname != NULL)
{
delete[] sname;
sname = NULL;
}
if(sRes != NULL)
{
delete[] sRes;
sRes = NULL;
}
}
char* Adaptee::getName()
{
if(sRes != NULL)
{
delete[] sRes;
sRes = NULL;
}
int len = strlen(STR_ADAPTEE) + strlen(sname);
sRes = new char[len +1];
strcpy(sRes,STR_ADAPTEE);
strcat(sRes,sname);
return sRes;
}
5、適配類Adapter定義
#ifndef ADAPTER_H
#define ADAPTER_H
#include "Target.h"
#include "Adaptee.h"
class Adapter : public Target, public Adaptee
{
public:
Adapter();
Adapter(char*);
~Adapter();
char* getName();
private:
char* sname;
char* sRes;
};
#endif
6、適配類Adapter實現
#include <string.h>
#include "Adapter.h"
#define STR_ADAPTER " Adapter: "
Adapter::Adapter(char* name) : Adaptee(name),Target(name)
{
if(name != NULL)
{
sname = new char[strlen(name) + 1];
strcpy(sname,name);
} else {
sname = NULL;
}
sRes = NULL;
}
Adapter::~Adapter()
{
if(sname != NULL)
{
delete[] sname;
sname = NULL;
}
if(sRes != NULL)
{
delete[] sRes;
sRes = NULL;
}
}
char* Adapter::getName()
{
if(sRes != NULL)
{
delete[] sRes;
sRes = NULL;
}
char* st = Target::getName();
char* sa = Adaptee::getName();
int len = strlen(sname) + strlen(STR_ADAPTER) + strlen(sa) + strlen(st);
sRes = new char[len + 1];
strcpy(sRes,st);
strcat(sRes,sa);
strcat(sRes,STR_ADAPTER);
strcat(sRes,sname);
return sRes;
}
7、適配類Adapter0定義
#ifndef ADAPTER0_H
#define ADAPTER0_H
#include "Target.h"
#include "Adaptee.h"
class Adapter0 : public Target
{
public:
Adapter0(char*);
~Adapter0();
char* getName();
private:
Adaptee* adp;
char* sname;
char* sRes;
};
#endif
8、適配類Adapter0實現
//#include <stdio.h>
#include <string.h>
#include "Adapter0.h"
#define STR_ADAPTER0 " Adapter0: "
Adapter0::Adapter0(char* name) : Target(name)
{
if(name != NULL)
{
sname = new char[strlen(name) + 1];
strcpy(sname,name);
}
else
{
sname = NULL;
}
sRes = NULL;
adp = new Adaptee(name);
}
Adapter0::~Adapter0()
{
if(sname != NULL)
{
delete[] sname;
sname = NULL;
}
if(sRes != NULL)
{
delete[] sRes;
sRes = NULL;
}
}
char* Adapter0::getName()
{
if(sRes != NULL)
{
delete[] sRes;
sRes = NULL;
}
char* st = Target::getName();
char* sa = adp->getName();
int len = strlen(STR_ADAPTER0) + strlen(sname) + strlen(st) + strlen(sa);
sRes = new char[len + 1];
strcpy(sRes,st);
strcat(sRes,sa);
strcat(sRes,STR_ADAPTER0);
strcat(sRes,sname);
return sRes;
}
9、客戶使用類Client實現
#include <stdio.h>
#include "Adapter.h"
#include "Target.h"
#include "Adapter0.h"
int main()
{
Target* t = new Adapter("test");
printf("%s/n",t->getName());
Target* t1 = new Adapter0("test0");
printf("%s/n",t1->getName());
return 0;
}