设计模式之适配器模式(C++实现)
2013-05-11 02:11
573 查看
在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。
有两类适配器模式:
·对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。
·类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承来实现)。
由于在这里类适配器我想不到什么好一点的例子,就先说对象适配器吧,大家都知道C++ STL中的栈和队列吧?在标准库中有一个标准容器deque双端队列,他支持
前面删除和插入,也支持后面删除和插入,但是我们的queue是一个前出后进的,而stack是一个后进后出的,标准库可并不去重新定义他们,而且是借助基容器实现的,默认的情况下用的deque 如果你想改变,也可以使用vector啊,只需要如下写代码:
stack <int,vector<int>> sta;
就可以了,下面让我们来完全实现一个适配器stack:
不知道上面这个例子我有没有扯远,我个人比较喜欢STL,也研究过他的源码,最近也在想着模仿stl写一个自己的库
回到正题,这个程序中的satck也就是标准库中标准实现的栈,只是这里我找不到以前写的那个内存分配器,不然就可以完全模拟并改编了,该stack就叫做容器的适配器,他以现成的接口,转变为自己想要的接口,这就是适配器模式,在标准库中的迭代器适配器,和函数对象适配器都是采用这种模式,比如迭代器适配器中的back_insert迭代器,就是借助了标准容器的push_back函数,一定要有这个函数的容器才可以用这个back_insert,相信也很好理解了,晚了,睡觉了!!
有两类适配器模式:
·对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。
·类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承来实现)。
由于在这里类适配器我想不到什么好一点的例子,就先说对象适配器吧,大家都知道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,相信也很好理解了,晚了,睡觉了!!
相关文章推荐
- 设计模式C++实现(3)——适配器模式
- 设计模式--适配器模式C++实现
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(6)——适配器模式
- 设计模式C++实现(3)——适配器模式
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- 设计模式(3)C++实现 适配器模式
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现--适配器模式
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(3)——适配器模式
- 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)
- 设计模式C++实现十三:适配器模式
- 设计模式C++实现(3)——适配器模式