F4定义:适配器模式(Adpter),将一个类的接口转换成客户希望的另外一个接口。Adpter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。【DP】
UML类图:
下面是我写的例子(例子的原理通过注释就可以知晓):
// Adpter.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <memory>
#include <list>
#include <string>
using namespace std;
//电源插座
class Socket
{
public:
Socket(int Voltage) : m_Voltage(Voltage){}
//供电
int Power()
{
cout << "插座电压:" << m_Voltage << endl;
return m_Voltage;
}
private:
//插口电压
int m_Voltage;
};
//笔记本电脑
class Laptop
{
public:
//开机
virtual void PowerOn() = 0;
public:
//要求的供电电压
static int m_V;
};
//规定是DC 12V
int Laptop::m_V = 12;
//电源适配器
class Adpter : public Laptop
{
public:
//与插座相连接
Adpter(Socket socket) : m_socket(socket){}
//开机
void PowerOn()
{
int m_VA = m_socket.Power();
if (m_VA != Laptop::m_V)
{
m_VA = Laptop::m_V;
cout << "经过适配器后变为:" << m_VA << "V" << endl;
}
else
{
cout << "此插座电压无需变压:" << m_VA << "V" << endl;
}
}
private:
//包含一个要适配的插座
Socket m_socket;
//适配器输出电压
int m_VA;
};
int _tmain(int argc, _TCHAR* argv[])
{
//一个220V插座
Socket socket220(220);
//一个110V插座
Socket socket110(110);
//一个12V插座
Socket socket12(12);
//一台笔记本电脑(随机带一个12V适配器),且与220V插座相连
Laptop *p1 = new Adpter(socket220);
Laptop *p2 = new Adpter(socket110);
Laptop *p3 = new Adpter(socket12);
//开机
p1->PowerOn();
p2->PowerOn();
p3->PowerOn();
return 0;
}
输出:
使用场景:
想使用一个已经存在的类,但如果它的接口,和你的要求不想同时,就应该考虑是哟个适配器模式;
或者在双方都不太容易修改的时候再使用适配器模式适配。