//目标抽象类
class Printer
{
public:
virtual void printWeak()=0;
virtual void printStrong()=0;
};
//被适配器类
class Banner
{
private:
string iteam;
public:
Banner(string iteam) {
this->iteam = iteam;
}
void showWeak() { cout << "......" << this->iteam << "......"<<endl; }
void showStrong() { cout << "******" << this->iteam << "******" << endl; }
};
//适配器类 双继承 重写目标类接口
class myprinter :public Printer, public Banner
{
public:
myprinter(string iteam) :Banner(iteam) {};
//重写父类方法实际执行被适配器的方法
virtual void printWeak() { showWeak(); };
virtual void printStrong() { showStrong(); };
};
void test04()
{
//使用时 直接使用适配器对象 使用父类指针构造一个适配器对象
Printer* printer1 = new myprinter("类适配器");
printer1->printWeak();
printer1->printStrong();
delete printer1;
}
//适配器模式 对象适配器
class myprinter_obj :public Printer
{
Banner* b2; //将被适配类当作自己的属性使用方法 满足合成复用原则
public:
myprinter_obj(Banner* MOD_b) :b2(MOD_b) {};//有参构造
virtual void printWeak() { b2->showWeak(); }; //重写父类方法实际执行被适配器的方法
virtual void printStrong() { b2->showStrong(); };
};
void test01()
{
//使用时 直接使用适配器对象 使用父类指针构造一个适配器对象
Banner* MOD_b = new Banner("对象适配器");
Printer* myprint2 = new myprinter_obj(MOD_b);
myprint2->printWeak();
myprint2->printStrong();
delete MOD_b;
delete myprint2;
}
int main()
{
test01();
return 0;
}