- Published on
设计模式(6)——适配器 Adapter
- Authors
- Name
- Leon
六、Adapter(适配器模式,别名 Wrapper 包装器模式,类对象结构型模式)
1. 问题:
当系统需要使用一个接口,而此接口与系统正在使用的接口不兼容时。
2. 意图:
将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
3. 适用:
想使用一个已经存在的类,而它的接口不符合需求。
4. 类图:
5. 中间层思考:
适配器模式需要使用的类与已有类之间加了一个中间层 —— Adapter,来解决接口不兼容的问题。
6. C++实现:
Adapter 模式根据实现方式不同,有类模式(继承)的适配器和对象(组合)模式的适配器。
- 编写一个类
Adapter
,包含一个与系统兼容的函数Request
- 让类
Adapter
继承要适配的类Adaptee
或 组合一个 Adaptee 对象 - 函数
Request
调用Adaptee
中的 具体函数
Adapter.h
// Adapter.h
#pragma once
class Target {
public:
Target();
virtual ~Target();
virtual void Request();
protected:
private:
};
class Adaptee {
public:
Adaptee();
~Adaptee();
void SpecificRequest();
protected:
private:
};
class Adapter : public Target, private Adaptee {
public:
Adapter();
~Adapter();
void Request();
protected:
private:
};
Adapter.cpp
// Adapter.cpp
#include "Adapter.h"
#include "Adapter.h"
#include <iostream>
Target::Target(){}
Target::~Target(){}
void Target::Request() {
std::cout << "Target::Request" << std::endl;
}
Adaptee::Adaptee() {}
Adaptee::~Adaptee() {}
void Adaptee::SpecificRequest() {
std::cout << "Adaptee::SpecificRequest" << std::endl;
}
Adapter::Adapter() {}
Adapter::~Adapter() {}
void Adapter::Request() {
this->SpecificRequest();
}
main.cpp
// main.cpp
#include "Adapter.h"
#include <iostream>
using namespace::std;
int main(int argc, char* argv[]) {
Target* tar = new Adapter();
tar->Request();
return 0;
}