代码如下:
#include <iostream>
#include <algorithm>
//定义一个双端队列
class Deque
{
public:
void push_back(int x);
void pop_back();
void front_back(int x);
void pop_front();
};
void Deque::push_back(int x)
{
std::cout << "Deque push_back" << std::endl;
}
void Deque::pop_back()
{
std::cout << "Deque pop_back" << std::endl;
}
void Deque::front_back(int x)
{
std::cout << "Deque front_back" << std::endl;
}
void Deque::pop_front()
{
std::cout << "Deque pop_front()" << std::endl;
}
//顺序容器
class Sequence
{
public:
virtual void push(int x) = 0;
virtual void pop() = 0;
};
//栈
class Stack:public Sequence
{
public:
virtual void push(int x);
virtual void pop();
private:
Deque mDeque;
};
void Stack::push(int x)
{
mDeque.push_back(x);
}
void Stack::pop()
{
mDeque.pop_back();
}
//队列
class Queue:public Sequence
{
public:
virtual void push(int x);
virtual void pop();
private:
Deque mDeque;
};
void Queue::push(int x)
{
mDeque.front_back(x);
}
void Queue::pop()
{
mDeque.pop_front();
}
int main()
{
Sequence *s1 = new Stack();
Sequence *s2 = new Queue();
s1->push(12);
s2->pop();
s2->push(13);
s2->pop();
delete s1;
delete s2;
return 0;
}
总结:适配器模式将一个类的接口转换成客户希望的另一种接口,使得原本不兼容而不能一起工作的类可以一起工作。本例中用双端队列来扮演了适配器模式的角色。本例中的栈和队列都是一种顺序容器。