适配器模式

来源:互联网 发布:ios游戏 知乎 编辑:程序博客网 时间:2024/06/07 16:17

是构造型模式之一,通过Adapter模式可以改变已有类(或外部类)的接口形式。
角色和职责
这里写图片描述
Target:
目标类,也就是客户端希望使用的类,里面有希望得到的接口–对应案例中的18V。
Adapter
适配器,将实际接口转换为希望使用的接口,适配器继承自目标类。–对应案例中的Adapter。
Adaptee
待适配的类,实际提供的类,通过适配器的功能,客户端可以使用其提供的实际类!–对应案例中的220V。
案例

#include <iostream>using namespace std;/*客户端希望使用的接口类*/class Current18V{public:    virtual void useCurrent18v() = 0;//希望使用的接口};/*提供实际接口的类*/class Current220V{public:    void useCurrent220v()//实际接口    {        cout<<"i am 220v"<<endl;    }};/*适配器--为了将实际接口转换为希望使用的接口--继承自希望使用的接口类--有一个有参构造函数--有一个实际接口类的对象或者指针作为成员变量----在希望使用的接口类的虚函数里调用实际类的接口达到转换的目的*/class Adapter : public Current18V{public:    Adapter(Current220V* current)//有参构造函数--形参是关于实际接口的成员变量    {        m_current = current;    }    //适配器的虚函数里调用实际类提供的接口--进行转换    //这就是对外提供的接口--也是客户端希望使用的接口    virtual void useCurrent18v()    {        cout<<"use 220v"<<endl;        m_current->useCurrent220v();//调用实际提供的接口    }private:    Current220V* m_current;//适配器有一个关于实际接口的成员变量};int main(){    Current220V * current220v = new Current220V;//实际接口    Adapter *adapter = new Adapter(current220v);//适配器    adapter->useCurrent18v();//适配器调用期望接口--实质在虚函数调用实际接口    /*回收内存*/    delete adapter;    delete current220v;    return 0;}