学了C++基本的语法都知道继承可以让子类拥有更多的功能,除了继承还有组合,委托,也能让一个类的功能增加。设计模式,这个设计是设计继承,组合,委托,之间相互叠加的方式,让其符合业务需求。
适配器要完场什么业务呢? 假如有个一类A,一个类B,类A想调用类B的函数。让类A包含类B的对象指针作为A的数据成员即可,现在的问题是,业务不允许改变类A。那么我们让类A派生一个子类C,这个子类中包含类B的对象指针作为A的数据成员,问题就解决了。把类C new出来实例指针赋值给类A定义的对象指针,那么类A就可以调用C中的B的成员。具体见代码。
适配器分为对象型,和继承型。上所述为对象型,看懂这个,继承型不难理解。
这些代码都是在学习这些的过程中码的。。。。。
上代码,亲测有效!
#include <iostream>
#include <string>
using namespace std;
//场景:我有一个三项插座,奈何我手机的充电线是一个两项插头
//现在我要买一个转换插座,它的插头能插我的在三项插座上,它
//的插座是两项的。可以给手机充电线插入。
//这个转换插座就叫做转换器。
//1.适配器模式分为:类适配器,对象适配器
//2.类适配器
//三项插座
class ThreePhaseOutlet
{
public:
virtual void GivePower() = 0;
};
//我的手机充电线,两项插头
class PlugWith2Hand
{
public:
void DoPlugin()
{
cout << "手机充电线已连接插座" << endl;
}
};
//转换器
class ClassAdapter : public ThreePhaseOutlet, public PlugWith2Hand
{
public:
void GivePower()
{
cout << "提供给两项插座" << endl;
DoPlugin();
}
};
//3.对象适配器
class ObjectAdapter : public ThreePhaseOutlet
{
public:
void GivePower()
{
cout << "提供给两项插座" << endl;
plugWith2Hand.DoPlugin();
}
PlugWith2Hand plugWith2Hand;
};
int main(void)
{
//类适配器
ClassAdapter* classAdapter = new ClassAdapter;
ThreePhaseOutlet* classThree = classAdapter;
classThree->GivePower();
cout << "-----------------------------" << endl;
//对象适配器
ObjectAdapter* objectAdapter = new ObjectAdapter;
ThreePhaseOutlet* objectThree = objectAdapter;
objectThree->GivePower();
system("pause");
return 0;
}