这一节开始谈谈结构型模式。结构型模式包括:**适配器、桥接、组成、装饰、外观、享元、代理模式**7种设计模式。这一节说一下适配器模式,适配器模式可以分为类适配器和对象适配器,类适配器其实就是多继承,一般用对象适配器,因此这里只讲对象适配器。
先上uml:
这里先注明,uml懒得画,都是从网上截图的,但是所有代码都是自己写的。
uml解析:客户需要的是Target中的Request接口,但是现有的Adeptee的接口是SpecificRequest(),而Adapter正是做这个事,提供一个Request接口,通过对象组合,调用Adaptee->SpecificRequest()。举个比较容易理解的例子,新的鼠标是usb接口的,而电脑的鼠标口是比较久的那种针孔的,怎么办呢?这时候需要一个转换器,也就是“适配器”,usb转针孔。
下面给出可运行的示例代码:
Adapter.h
#pragma once
#include <iostream>
using namespace std;
class Adaptee;
class Target
{
public:
virtual void Request()=0;
};
class Adapter:public Target
{
public:
Adapter(Adaptee &adaptee);
~Adapter();
void Request();
private:
Adaptee & m_Adaptee;
};
class Adaptee
{
public:
Adaptee(){}
~Adaptee(){}
void SpecificRequest();
};
Adapter.cpp
#include "Adapter.h"
Adapter::Adapter(Adaptee &adaptee):m_Adaptee(adaptee)
{
}
Adapter::~Adapter()
{
}
void Adapter::Request()
{
m_Adaptee.SpecificRequest();
}
void Adaptee::SpecificRequest()
{
cout<<"SpecificRequest"<<endl;
}
main.cpp
#include "Adapter.h"
int main(int argc,char ** argv)
{
Adaptee adaptee;
Target *f = new Adapter(adaptee);
f->Request();
return 0;
}
执行结果: