您的位置:首页 > 其它

设计模式 - 适配器模式

2015-02-03 17:39 141 查看
适配器模式,将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容,而不能一起工作的那些类,可以一起工作。

在开发时,当系统的数据和逻辑都正确,但接口不符时,可以考虑使用适配器,目的是使控制范围之外的一个原有对象,与某个接口匹配。

主要有两种适配器模式类型:类适配器、对象适配器。类适配器采用多重继承,而对象适配器采用组合接口类。对象适配器模式更为通用一些,以下就是它的UML结构图:



Target,客户所期待的接口类,可以是具体类,也可以是抽象类。

Adaptee,需要被适配的类,其接口与客户所期待的接口不兼容,需要被转换。

Adapter,适配器类,做转换工作,内部维护一个Adaptee对象指针,把不兼容的Adaptee的接口,转换成客户期望的Target的接口。

基本实现代码如下:

//客户期待的接口类
class Target
{
public:
Target() {}
~Target() {}

virtual void ProcRequest() {}
};

//需要被适配的接口类(不兼容的接口类)
class Adaptee
{
public:
Adaptee() {}
~Adaptee() {}

//不兼容的接口
void SpecialRequest()
{
printf("这是一个特殊的接口,需要被适配 \n");
}
};

//适配器类(完成转换工作)
class Adapter : public Target
{
public:
Adapter()
{
m_pSpecial = new Adaptee();
}

~Adapter()
{
if(m_pSpecial)
delete m_pSpecial;

m_pSpecial = NULL;
}

void ProcRequest()
{
printf("这是适配器类,开始转换接口 \n");
m_pSpecial->SpecialRequest();
}

private:
Adaptee*	m_pSpecial;
};

//使用时的代码
int main()
{
//期望的目标接口对象
Target *p = new Adapter();

//调用不兼容的接口
p->ProcRequest();
}
适配器模式其实就是把完成同一个功能、但接口不能兼容的类,桥接在一起,使之可以协同工作。当我们想要复用一些现存的类、或是旧的接口时,而复用的环境又与接口的要求不一致,就可以使用适配器模式。

何时使用适配器模式?

两个类所做的事情相同或相似、但有不同的接口时使用。但适配器模式不能滥用,一般在开发后期或维护阶段才考虑使用,而在设计初期,是不必用到适配器模式的。

一个大的原则:在使用双方都不太容易修改的时候再使用适配器模式来进行兼容匹配,而不是一有不同就使用它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: