最近自学了设计模式,发现好多书的java实现的。因为本人是从事C++开发的,因此想尝试用C++自己实现一遍,加深理解。
适配器模式
定义:
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适用性:
1、 你想使用一个已经存在的类,而它的接口不符合你的需求
2、 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
3、 你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
类适配器结构类图:
Target:定义了我们所需要的接口。
Adaptee:定义了已经存在的类,也就是我们想要使用的类。
Adapter:对Adaptee和Target的接口进行适配。
依赖于对象组合的对象适配器结构图:
类适配器:
优点:
1、 Adapter可以重定义Adaptee的部分行为
2、 不需要额外的指针以间接得到Adaptee
不足:
当我们想要匹配一个类以及所有它的子类时,类Adapter将无法实现
对象适配器:
优点:
一个Adapter可以与多个Adaptee以及它的所有子类同时工作
不足:
不能重定义Adaptee的行为
实现:
class Target
{
public:
Target(){}
virtual void Request() = 0;
};
class Adaptee
{
public:
Adaptee(){}
voidSpecificRequest()
{
cout<<"Adaptee SpecificRequest"<<endl;
}
};
//这里需要注意,public继承Target,private继承Adaptee
class Adapter:public Target,privateAdaptee
{
public:
Adapter(){}
voidRequest()
{
cout<<"Adapter Request"<<endl;
SpecificRequest();
}
};
Target*pt = new Adapter;
pt->Request();