一、功能
将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
二、结构图
(1)class adapter
(2)object adapter
三、实现
和其他很多模式一样,学习设计模式的重点是学习每种模式的思想,而不应拘泥于它的某种具体结构图和实现。因为模式是灵活的,其实现可以是千变万化的,只是所谓万变不离其宗。 在STL中大量运用了Adapter模式,象function adapter、iterator adpter,它们与这里说的adapter结构并不一样,但思想是一样的。具体的介绍可到侯捷网站上找相关文章,他讲得非常好。
四、示例代码
(1)class adapter
namespace DesignPattern_Adapter { // class Adaptee class Adaptee { public: void SpecialRequest() {} } ;
// class Target class Target { public: virtual void Request() = 0 ; } ;
// class Adapter class Adapter : public Target, private Adaptee { public: virtual void Request() { SpecialRequest() ; } } ; }
客户端代码: { using namespace DesignPattern_Adapter ; Target *p = new Adapter() ; p->Request() ; //实际上调用的是Adaptee::SpecialRequest() }
(2)object adapter namespace DesignPattern_Adapter
{ // class Adaptee class Adaptee { public: void SpecialRequest() {} } ;
// class Target class Target { public: virtual void Request() = 0 ; } ;
// class Adapter class Adapter : public Target { public: virtual void Request() { _adaptee.SpecialRequest() ; } private: Adaptee _adaptee ; } ; }
客户端代码: { using namespace DesignPattern_Adapter ; Target *p = new Adapter() ; p->Request() ; //实际上调用的是Adaptee::SpecialRequest() }
|