C++ 23种设计模式(6)-适配器模式
时间:2022-12-02 05:30:00
适配器模式将一个类的接口转换为客户想要的另一个接口,使那些因为接口不兼容而不能一起工作的类可以一起工作。它包括类适配器和对象适配器,本文针对对对象适配器。例如,在STL适配器模式中使用。STL实现了称为双端队列的数据结构(deque),支持插入和删除前后两段。STL在实现栈和队列时,直接使用双端队列而不是从头开始定义它们。双端队列扮演适配器的角色。队列使用后端插入,前端删除。而栈用到了它的后端插入,后端删除。假设栈和队列都是顺序容器,有压入和弹出两种操作。
代码如下:
#include #include using namespace std; ///双端队列 class Deque {
public: void push_back(int x) {
cout << "Deque push_back" << endl; } void push_front(int x) {
cout << "Deque push_front" << endl; } void pop_back() {
cout << "Deque pop_back" << endl; } void pop_front() {
cout << "Deque pop_front" << endl; } }; ///顺序容器 class Sequence {
public: virtual void push(int x) = 0; virtual void pop() = 0; }; ///栈的父类是顺序容器 使用的方法是双端队列 class Stack : public Sequence {
public: void push(int x) {
deque.push_back(x); }
void pop() {
deque.pop_back(); }
private:
Deque deque; //双端队列
};
//队列的父类是顺序容器 用到的方法是双端队列
class Queue : public Sequence
{
public:
void push(int x) {
deque.push_back(x); }
void pop() {
deque.pop_front(); }
private:
Deque deque; //双端队列
};
int main()
{
Sequence *s1 = new Stack();
Sequence *s2 = new Queue();
s1->push(1); s1->pop();
s2->push(1); s2->pop();
delete s1; delete s2;
getchar();
return 0;
}
执行结果如下: