那谁的技术博客
感兴趣领域:高性能服务器编程,算法,Linux内核
C++博客
首页
新随笔
联系
聚合
管理
随笔-174 评论-598 文章-0 trackbacks-0
常见设计模式的解析和实现(C++)之六-Adapt模式
作用:
将一个类的接口转换成客户希望的另外一个接口。Adapt 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
UML示意图
1)采用继承原有接口类的方式
2)采用组合原有接口类的方式
解析:
Adapt模式其实就是把完成同样的一个功能但是接口不能兼容的类桥接在一起使之可以在一起工作,这个模式使得复用旧的接口成为可能.
实现:
Adapt模式有两种实现办法,一种是采用继承原有接口类的方法,一种是采用组合原有接口类的方法,这里采用的是第二种实现方法.
1)Adapt.h
/**/
/*
*******************************************************************
created: 2006/07/20
filename: Adapter.h
author: 李创
http://www.cppblog.com/converse/
purpose: Adapter模式的演示代码
********************************************************************
*/
#ifndef ADAPTER_H
#define
ADAPTER_H
//
需要被Adapt的类
class
Target
{
public
:
Target()
{}
virtual
~
Target()
{}
virtual
void
Request()
=
0
;
}
;
//
与被Adapt对象提供不兼容接口的类
class
Adaptee
{
public
:
Adaptee()
{}
~
Adaptee()
{}
void
SpecialRequest();
}
;
//
进行Adapt的类,采用聚合原有接口类的方式
class
Adapter
:
public
Target
{
public
:
Adapter(Adaptee
*
pAdaptee);
virtual
~
Adapter();
virtual
void
Request();
private
:
Adaptee
*
m_pAdptee;
}
;
#endif
2)Adapt.cpp
/**/
/*
*******************************************************************
created: 2006/07/20
filename: Adapter.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: Adapter模式的演示代码
********************************************************************
*/
#include
"
Adapter.h
"
#include
<
iostream
>
void
Adaptee::SpecialRequest()
{
std::cout
<<
"
SpecialRequest of Adaptee\n
"
;
}
Adapter::Adapter(Adaptee
*
pAdaptee)
: m_pAdptee(pAdaptee)
{
}
Adapter::
~
Adapter()
{
delete m_pAdptee;
m_pAdptee
=
NULL;
}
void
Adapter::Request()
{
std::cout
<<
"
Request of Adapter\n
"
;
m_pAdptee
->
SpecialRequest();
}
3)Main.cpp
/**/
/*
*******************************************************************
created: 2006/07/20
filename: Main.cpp
author: 李创
http://www.cppblog.com/converse/
purpose: Adapter模式的测试代码
********************************************************************
*/
#include
"
Adapter.h
"
#include
<
stdlib.h
>
int
main()
{
Adaptee
*
pAdaptee
=
new
Adaptee;
Target
*
pTarget
=
new
Adapter(pAdaptee);
pTarget
->
Request();
delete pTarget;
system(
"
pause
"
);
return
0
;
}
posted on 2006-07-23 20:24
那谁
阅读(795)
评论(2)
编辑
收藏
引用
所属分类:
设计模式
评论:
#
re: 常见设计模式的解析和实现(C++)之六-Adapt模式 2007-03-30 19:50 |
init
有无class adapter(inheritance)的实现例子? 有点不明白各自的优劣~
回复
更多评论
#
re: 常见设计模式的解析和实现(C++)之六-Adapt模式 [未登录]
2008-06-06 13:51 |
张树坤
类的适配器模式是一种静态的结构模式,而且使用多重继承连接到Adapter类;对象的适配器使用对象的合成关系,在被适配的类至目标类的接口匹配中使用委派关系连接到Adapter类。
这两种方法使用情景和参与者几乎一样,对象的适配器的实现方法更为灵活,建议使用。
回复
更多评论
刷新评论列表
标题
姓名
主页
验证码
*
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
.NET频道
博客园社区
闪存
相关文章:
服务器公共库开发--线程安全的singleton类, 可配置的线程锁管理类
常见设计模式的解析和实现(C++)文档及源码打包下载
常见设计模式的解析和实现(C++)之二十一-完结篇
常见设计模式的解析和实现(C++)之二十-Visitor模式
常见设计模式的解析和实现(C++)之十九-Memento模式
常见设计模式的解析和实现(C++)之十八-Iterator模式
常见设计模式的解析和实现(C++)之十七-State模式
常见设计模式的解析和实现(C++)之十六-Strategy模式
常见设计模式的解析和实现(C++)之十五-Observer模式
常见设计模式的解析和实现(C++)之十四-Command模式
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理
<
2006年7月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(42)
给我留言
查看公开留言
查看私人留言
随笔分类
(207)
C\C++(18)
ccache(5)
CGL(5)
libevent(2)
linux kernel(6)
Linux/Unix(32)
memcached(1)
mktags(3)
Perl(3)
操作系统(1)
读书笔记(3)
服务器设计(33)
脚本语言(1)
其他(5)
设计模式(24)
算法与数据结构(43)
图形学(1)
网络编程(21)
随笔档案
(174)
2009年7月 (1)
2009年6月 (3)
2009年5月 (2)
2009年4月 (7)
2009年3月 (2)
2009年2月 (2)
2009年1月 (5)
2008年12月 (1)
2008年11月 (2)
2008年10月 (6)
2008年9月 (12)
2008年8月 (11)
2008年7月 (5)
2008年6月 (2)
2008年4月 (3)
2008年3月 (3)
2008年2月 (1)
2008年1月 (1)
2007年12月 (3)
2007年11月 (3)
2007年8月 (1)
2007年7月 (2)
2007年6月 (2)
2007年5月 (9)
2007年4月 (1)
2007年3月 (8)
2007年2月 (3)
2007年1月 (5)
2006年12月 (4)
2006年11月 (3)
2006年10月 (5)
2006年9月 (4)
2006年8月 (13)
2006年7月 (28)
2006年4月 (1)
2006年3月 (4)
2006年2月 (4)
2006年1月 (1)
2005年12月 (1)
相册
文件
开源项目
libevent
lighttpd
memcached
PCRE for Windows (Win32)
sqlite
STLFilt
论坛
ChinaUnix
OldLinux
朋友
cugb_cat
Edengundam
win_hate
ypxing
老罗
收藏
Dictionary of Algorithms and Data Structures
unixtoolbox
最新随笔
1. mktags0.3版本发布--支持指定某个目录的搜索深度
2. 用gdb跟踪函数栈桢的变化情况
3. mktags0.2版本发布
4. mktags--根据指定的文件路径以及文件类型生成ctags以及cscope索引文件的工具
5. 同步/异步与阻塞/非阻塞的区别
6. linux内核V2.6.11学习笔记(6)--中断处理
7. linux内核V2.6.11学习笔记(5)--异常处理
8. linux内核V2.6.11学习笔记(4)--中断与异常处理概述
9. connect的两种出错情况
10. linux内核V2.6.11学习笔记(3)--switch_to宏
搜索
积分与排名
积分 - 260738
排名 - 7
最新随笔
1. mktags0.3版本发布--支持指定某个目录的搜索深度
2. 用gdb跟踪函数栈桢的变化情况
3. mktags0.2版本发布
4. mktags--根据指定的文件路径以及文件类型生成ctags以及cscope索引文件的工具
5. 同步/异步与阻塞/非阻塞的区别
6. linux内核V2.6.11学习笔记(6)--中断处理
7. linux内核V2.6.11学习笔记(5)--异常处理
8. linux内核V2.6.11学习笔记(4)--中断与异常处理概述
9. connect的两种出错情况
10. linux内核V2.6.11学习笔记(3)--switch_to宏
最新评论
1. re: epoll为什么这么快
比喻很形象,如果能再加上一些测试数据就好了
--liang
2. re: 常见设计模式的解析和实现(C++)之一-Factory模式[未登录]
没有具体的实用例子,没意思
--canaan
3. re: 用gdb跟踪函数栈桢的变化情况
评论内容较长,点击标题查看
--zuhd
4. re: 卖书
刷过上条评论,省得都加我QQ来了。。。
--DebiaX
5. re: 第一个socket程序-C\S模式的文件传输程序
真是太好了。
--faileast
阅读排行榜
1. epoll学习笔记(8034)
2. 常见设计模式的解析和实现(C++)文档及源码打包下载(5862)
3. 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)(4006)
4. [算法]红黑树的实现代码(修订版)(3633)
5. 使用tolua++创建基于C\C++语言的lua脚本(3571)
6. libevent事件处理框架分析(3483)
7. epoll为什么这么快(3452)
8. 红黑树的实现源码(第二次修订版)(3428)
9. 第一个socket程序-C\S模式的文件传输程序(3232)
10. P2P原理的解释与实现(3029)
11. [数据结构]红黑树的实现源码(3020)
12. epoll相关资料整理(2932)
13. lighttpd1.4.18代码分析(一)--watcher,worker模型(2909)
14. 我的项目Makefile文件模板(2906)
15. 程序设计经验总结(2849)
16. 探索C++的秘密之一详解extern "C"(2837)
17. Linux下面的线程锁,条件变量以及信号量的使用(2825)
18. 研究了一下SGI STL的内存算法(2817)
19. AVL树的实现代码(2807)
20. 发布我的开源cache库ccache(2806)
21. (C++)一个愚蠢的错误(2773)
22. 让libevent支持多线程(2771)
23. 自己设想的一个IM服务器的架构(2692)
24. ccache发布0.5版本(2579)
25. 自己设想的一个IM服务器的架构(续一)(2560)
26. 二分查找算法(迭代和递归版本)(2543)
27. 多进程服务器中,epoll的创建应该在创建子进程之后(2510)
28. 服务器公共库开发-内存池管理模块(2476)
29. 对一个服务器的几步优化(2436)
30. 两种网络数据格式的比较(2408)
31. 同步/异步与阻塞/非阻塞的区别(2403)
32. memcache内存池的设计原理(2265)
33. [算法]找出m个数中最小的n个数(2252)