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

[复制链接]

该用户从未签到

759

主题

763

帖子

4660

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4660
跳转到指定楼层
楼主
发表于 2018-1-7 11:02:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》(DP)两本书。本文介绍适配器模式的实现。        DP上的定义:适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。它包括类适配器和对象适配器,本文针对的是对象适配器。举个例子,在STL中就用到了适配器模式。STL实现了一种数据结构,称为双端队列(deque),支持前后两段的插入与删除。STL实现栈和队列时,没有从头开始定义它们,而是直接使用双端队列实现的。这里双端队列就扮演了适配器的角色。队列用到了它的后端插入,前端删除。而栈用到了它的后端插入,后端删除。假设栈和队列都是一种顺序容器,有两种操作:压入和弹出。下面给出相应的UML图,与DP上的图差不多。

        根据上面的UML图,很容易给出实现。
  1. //双端队列
  2. class Deque
  3. {
  4. public:
  5.         void push_back(int x) { cout<<"Deque push_back"<<endl; }
  6.         void push_front(int x) { cout<<"Deque push_front"<<endl; }
  7.         void pop_back() { cout<<"Deque pop_back"<<endl; }
  8.         void pop_front() { cout<<"Deque pop_front"<<endl; }
  9. };
  10. //顺序容器
  11. class Sequence
  12. {
  13. public:
  14.         virtual void push(int x) = 0;
  15.         virtual void pop() = 0;
  16. };
  17. //栈
  18. class Stack: public Sequence
  19. {
  20. public:
  21.         void push(int x) { deque.push_back(x); }
  22.         void pop() { deque.pop_back(); }
  23. private:
  24.         Deque deque; //双端队列
  25. };
  26. //队列
  27. class Queue: public Sequence
  28. {
  29. public:
  30.         void push(int x) { deque.push_back(x); }
  31.         void pop() { deque.pop_front(); }
  32. private:
  33.         Deque deque; //双端队列
  34. };
复制代码
使用方式如下:
  1. int main()
  2. {
  3.         Sequence *s1 = new Stack();
  4.         Sequence *s2 = new Queue();
  5.         s1->push(1); s1->pop();
  6.         s2->push(1); s2->pop();
  7.         delete s1; delete s2;
  8.         return 0;
  9. }
复制代码
本人享有博客文章的版权,转载请标明出处 http://blog.csdn.net/wuzhekai1985
分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表