UML
点击查看【processon】
需求场景
User想使用Apatee的功能,但是很麻烦,可能是因为接口不兼容,比如参数类型,数量等不匹配,每次调用都要做很多重复工作。
解决(适配器模式)
- 1、定义User想要的接口
- 即定义Target抽象类,里面包含想要的纯虚函数。
- 2、实现User想要的接口
- 即定义Adapter具体类,继承Target,同时这个Adapter要获得Adaptee的功能,再才“有数据”去实现Target接口,获得途径有两种:
- Adapter继承Adaptee,直接获得Adaptee的功能。
- Adapter有一个Adaptee成员对象,间接获得Adaptee的功能。
- 即定义Adapter具体类,继承Target,同时这个Adapter要获得Adaptee的功能,再才“有数据”去实现Target接口,获得途径有两种:
- 3、User使用接口
/**按照上面的解决步骤**/ //第一步,定义User想要的接口,定义抽象类 struct UserInterface{ virtual int add(const string&, const string&) = 0; };
//第二步,实现User想要的接口,继承抽象类,同时通过继承Adaptee获得功能。 struct Adapter : UserInterface, Adaptee{ int add(const string &a, const string &b){ //把string转成int,就是适配工作。这里假设假设数据不会触发异常。 return add(stoi(a) + stoi(b))
}
} //第三步:User使用接口 struct User{ int fuck(const UserInterface& interface){ //在User眼里,只有接口,不关注具体是谁。 string data1 = “1”, data2 = “2”; //假设这是User获得的数据 return interface.add(data1, data2); } }
int main(){ Adapter adapter; User usr; const UserInterface &interface = adapter;
usr.fuck(interface)
} ```