1.适配器模式
将一种或者一系列接口转换为用户需要的接口的一种结构型设计模式 根据实现方式的不同分为类适配器模式和对象适配器模式
对应的结构
目标接口
用户所期待的接口
适配者类
当前已有的用于进行转换的接口,它会被转换为目标接口
适配器类
一个转换器,可以通过继承或组合方式将适配者类转换为目标接口,让用户按照目标接口的方式使用适配者类的接口
2.类适配器模式
定义适配器类来继承适配者类,同时继承和实现目标接口,
代码实现
#include <iostream>
#include <string>
using namespace std;
class Mana
{
public:
virtual string showProperty() = 0;
};
class FireMana : public Mana
{
public:
virtual string showProperty()
{
return "火属性灵力,特性:爆裂、灼烧";
}
};
class XianYuanLi
{
public:
virtual string showPower() = 0;
};
class FireXianYuanLi : public XianYuanLi
{
public:
virtual string showPower()
{
return "火属性仙元力,特性:毁灭";
}
};
class ClassAdapter : public FireXianYuanLi, public Mana
{
public:
virtual string showProperty()
{
return showPower();
}
};
void DriveFairy(Mana* mana)
{
if (mana->showProperty().find("仙元力") != string::npos)
{
cout << "驱动仙器成功!" << endl;
}
else
{
cout << "驱动仙器失败!" << endl;
}
}
int main()
{
DriveFairy(new ClassAdapter);
return 0;
}
运行结果:
3.对象适配器模式
定义一个适配器类,通过组合适配者类,继承并实现目标接口
代码实现
运行结果:
#include <iostream>
#include <string>
using namespace std;
class Mana
{
public:
virtual string showProperty() = 0;
};
class FireMana : public Mana
{
public:
virtual string showProperty()
{
return "火属性灵力,特性:爆裂、灼烧";
}
};
class XianYuanLi
{
public:
virtual string showPower() = 0;
};
class FireXianYuanLi : public XianYuanLi
{
public:
virtual string showPower()
{
return "火属性仙元力,特性:毁灭";
}
};
class ObjectAdapter : public Mana
{
private:
XianYuanLi* xyl;
public:
ObjectAdapter()
:xyl(new FireXianYuanLi)
{}
void setXianYuanLi(XianYuanLi* li)
{
xyl = li;
}
virtual string showProperty()
{
return xyl->showPower();
}
};
void DriveFairy(Mana* mana)
{
if (mana->showProperty().find("仙元力") != string::npos)
{
cout << "驱动仙器成功!" << endl;
}
else
{
cout << "驱动仙器失败!" << endl;
}
}
int main()
{
DriveFairy(new ObjectAdapter);
return 0;
}
运行结果:
4.应用场景
1.已有的接口不满足此时的使用要求,需要将已有的接口进行转换来达到复用的目的; 2.将一组单一的接口整合为一个功能更加全面的接口
|