您的位置:首页 > 编程语言 > C语言/C++

设计模式之适配器模式(C++实现)

2013-05-11 02:11 573 查看
设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装。将一个的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。

有两类适配器模式:

·对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。

·类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承来实现)。

 

由于在这里类适配器我想不到什么好一点的例子,就先说对象适配器吧,大家都知道C++ STL中的栈和队列吧?在标准库中有一个标准容器deque双端队列,他支持

前面删除和插入,也支持后面删除和插入,但是我们的queue是一个前出后进的,而stack是一个后进后出的,标准库可并不去重新定义他们,而且是借助基容器实现的,默认的情况下用的deque 如果你想改变,也可以使用vector啊,只需要如下写代码:

stack <int,vector<int>>  sta;

就可以了,下面让我们来完全实现一个适配器stack:

template<class Type,class BaseCon = deque<Type>>  //模版默认参数指定为deque
class Stack
{
private:
BaseCon stack;          //定义基容器
public:
void push(Type elem)
{
stack.push_back(elem);
}

void pop()
{
stack.pop_back();
}

Type & top()
{
return stack.back();
}

bool empty()
{
return stack.empty();
}

signed int size()
{
return stack.size();
}
};

int main()
{
Stack<int,vector<int>> stack;
for(int i=1;i<10;i++)
stack.push(i);
while( !stack.empty() )
{
cout<<stack.top();
stack.pop();
}
system("pause");
return 0;
}

不知道上面这个例子我有没有扯远,我个人比较喜欢STL,也研究过他的源码,最近也在想着模仿stl写一个自己的库

回到正题,这个程序中的satck也就是标准库中标准实现的栈,只是这里我找不到以前写的那个内存分配器,不然就可以完全模拟并改编了,该stack就叫做容器的适配器,他以现成的接口,转变为自己想要的接口,这就是适配器模式,在标准库中的迭代器适配器,和函数对象适配器都是采用这种模式,比如迭代器适配器中的back_insert迭代器,就是借助了标准容器的push_back函数,一定要有这个函数的容器才可以用这个back_insert,相信也很好理解了,晚了,睡觉了!!

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息