將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
(1)類適配器:
當客戶在接口中定義了他期望的行爲時,我們就可以應用適配器模式,提供一個實現該接口的類,並且擴展已有的類,通過創建子類來實現適配。
下面是類適配器的UML圖:
(2)對象適配器:
對象適配器”通過組合除了滿足“用戶期待接口”還降低了代碼間的不良耦合。在工作中推薦使用“對象適配”。下面是對象適配器的UML圖:
(3) 缺省適配器模式:
缺省適配器模式是一種特殊的適配器模式,但這個適配器是由一個抽象類實現的,並且在抽象類中要實現目標接口中所規定的所有方法,但很多方法的實現都是“平庸”的實現,也就是說,這些方法都是空方法。而具體的子類都要繼承此抽象類。
1、創建PatternAdapter.h
#ifndef _PATTERNADAPTER_H_
#define _PATTERNADAPTER_H_
#include <iostream>
#include <string>
using namespace std;
class Teacher
{
private :
string s;
public :
Teacher(string s)
{
this->s=s;
}
void teachStart()
{
cout<<"start-->"<<s<<endl;
}
void teachStop()
{
cout<<"stop-->"<<s<<endl;
}
};
class Print
{
virtual void printStart()=0;
virtual void printStop()=0;
};
class PrintTeacher:private Teacher,private Print
{
public :
PrintTeacher(string s):Teacher(s){}
virtual void printStart()
{
Teacher::teachStart();
}
virtual void printStop()
{
Teacher::teachStop();
}
};
#endif
2、創建Client.h
#include <iostream>
#include "Iterator.h"
#include "PatternAdapter.h"
#include <string>
using namespace std;
int main()
{
string s("zhongguorenmin");
PrintTeacher * pt=new PrintTeacher(s);
pt->printStart();
pt->printStop();
delete pt;
system("pause");
return 0;
}