首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > TinyMail研究—Stream及相关设计模式
【标  题】:TinyMail研究—Stream及相关设计模式
【关键字】:TinyMail,Stream
【来  源】:http://blog.csdn.net/absurd/archive/2007/04/12/1562647.aspx

TinyMail研究—Stream及相关设计模式

TinyMail研究—Stream及相关设计模式

 

转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd

作者联系方式:Li XianJing <xianjimli at hotmail dot com>

更新时间:2007-4-12

 

TinyMail是一套针对移动设备设计的邮件系统框架,为了达到最大的灵活性,它采用了很多设计模式和先进的编程技术,让框架的每一部分都可以定制和配置。TinyMail流行的趋势非常明显,Nokia770/800GPE Phone Edition等项目中都使用了它。因为我们也要开发邮件系统,所以花了几天时间去研究它的实现,这里记录一些研究笔记,供有兴趣的朋友参考。本文介绍一下Stream及相关设计模式。

 

Stream是对输入/输出的抽象,为使用者提供一个统一的接口,使用者使用这个接口而不必关心它的实现,这是针对接口编程的典型例子。TinyMail实现了很多Stream,它们的关系如下:

 

 

CamelStream接口要求实现下列虚函数:

ssize_t   (*read)       (CamelStream *stream, char *buffer, size_t n);

ssize_t   (*write)      (CamelStream *stream, const char *buffer, size_t n);

int       (*close)      (CamelStream *stream);

int       (*flush)      (CamelStream *stream);

gboolean  (*eos)        (CamelStream *stream);

int       (*reset)      (CamelStream *stream);

 

CamelSeekableStream接口要求实现下列虚函数:

off_t (*seek)       (CamelSeekableStream *stream, off_t offset, CamelStreamSeekPolicy policy);

off_t (*tell)       (CamelSeekableStream *stream);

int  (*set_bounds)  (CamelSeekableStream *stream, off_t start, off_t end);

 

CamelTcpStream接口要求实现下列虚函数:

int (*connect)    (CamelTcpStream *stream, struct addrinfo *host);

int (*getsockopt) (CamelTcpStream *stream, CamelSockOptData *data);

int (*setsockopt) (CamelTcpStream *stream, const CamelSockOptData *data);

 

struct sockaddr * (*get_local_address)  (CamelTcpStream *stream, socklen_t *len);

struct sockaddr * (*get_remote_address) (CamelTcpStream *stream, socklen_t *len);

ssize_t (*read_nb)   (CamelTcpStream *stream, char *buffer, size_t n);

 

这其中使用了不少设计模式,其中包括:

 

1.         Adapter模式

Stream的整个设计都是基于Adapter模式的,TargetCamelSeekableStreamCamelStreamCamelTcpStream三个接口,AdapterCamelStreamMemCamelStreamFsCamelTcpStreamSSL之类的具体实现,而adaptee则是内存、文件和Socket之的Stream

 

2.         Proxy模式

CamelStreamBuffer基于Proxy模式为其它Stream提供一种cache功能,让Stream可以预先读取和延迟写入,以提高Stream的性能。当然,这对于socket和文件之类stream的效果最为明显,而对于内存stream反而是多此一举。

 

3.         Decorator模式

CamelStreamFilter基于Decorator模式为其它Stream提供一种转换功能,比如加密、编码转换或文件格式转换等等。

      

4.         Strategy模式

CamelStreamFilter本身并不提供任何转换,真正的转换是filter决定的。安装不同的filter就可以完成不同的转换。CamelStreamFilterContext,而filter则是Strategy

 

5.         Pipe-Filter模式

CamelStreamFilter支持多级filter,一个filter一个filter调用,这是典型的Pipe-Filter模式。

 

~~end~~

 
log 骨骼动画和八叉树:【上一篇】
Symbian OS 开发初级手册:【下一篇】
【相关文章】
  • 【求助】xmlhttp.responseStream怎么转化成C#能引用的数据流
  • Platform Manager cannot create the communication streams needed by the debugger.
  • TinyMail研究—类型系统
  • java中使用ObjectOutputStream和ObjectInputStream时产生的“invalid stream header”错误解决方法
  • vc2005 stringstream 内存泄漏
  • iostream库(Primer第20章小结)
  • 轻松搞定gstreamers的插件问题
  • end of stream was detected on a read
  • 今天终于把iostream 与iostream.h搞明白了
  • tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
  • 【随机文章】
  • hdl: testbench generator
  • Atlas学习手记(26):使用Validators验证用户输入
  • 桌面工具Personal HelperV2.1破解分析
  • 搜索引擎优化之链接策略
  • 2006-4-22 ASP VBScript 分页函数 by Stabx, 2006-04-22
  • rpm文件下载的地址
  • 使用ClickOnce部署VS2005中的WinForm应用程序
  • 如何在GridView中一次性批量更新多行数据
  • oracle sqlplus脚本建库总结
  • 了解计算机网络的各种术语
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.