转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
设计模式在制作升级文件包中的应用         ★★★★

设计模式在制作升级文件包中的应用

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2203 更新时间:2009/4/23 18:26:56

设计模式在制作升级文件包中的应用

                                      钱波 钱晓贤 高春玲

 

引言

软件系统的复杂性越来越大,而现有的类库也已经不能满足工程的需要,软件开发小组得到的建议是除了软件本身的特性突出,快速投放市场,成本低以外,还有性能和安全,并且软件能够做到改动容易,能及时交付,升级快速。软件构架的确会成为首要目标,但是架构可能很难说清楚是怎么回事,因为事实并不会如设计师所愿,设计展开以后,需求和构架解决方案将会越来越具体,设计师该怎样做呢?

 

设计模式的提出

模式在构造复杂系统得重要性已经在其它领域被认可,软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。灵活使用各种设计模式看来便成了一种设计上的技巧,已有的设计模式确实提供了设计的基础,但是设计模式并不是限于成规,关键在于怎样灵活的运用。

 实例升级文件的制作

我们的文件是所需信息和几个文件的合并,后来在需要的基础上进行压缩,当然,升级文件下载后正好使个相反的过程,解压缩后分拆文件,然后把它们放置到合适的目录下去,实际上这个过程也可以看作是备份文件的产生和备份恢复。使用继承是添加功能的有效途径,我们可以在以前的类上派生一个类添加解压缩的功能,在完成以后就可以使用新增的功能了,这的确是一个方法,但是还有更为灵活的方法,更容易理解和分拆功能。我们可以利用模式装饰者,模式装饰者是一种对象结构型模式,就增加功能来说,使用继承是添加功能的一种有效途径,但是Decorator 模式比生成子类更为灵活。

 

现在首先分拆功能,可能是这样的:

  

图一 功能拆分类图

从图一上看,TFileInfo 类实际上是我们的接口,是位于顶层的类,现在主要需要的是三个继承者,1合并文件类TFileInfoReadIn,2分拆文件的类,TFileInfoReadOut3解压缩类TZipFile,在开始的时候并没有构造TFileInfo这样一个顶层类,。因为看起来并不需要他,我们可以用单独的TFileInfoReadIn 对象来构建合并的程序,完成后交给TZipFile的去压缩,在反过来的过程中用TZipFile对象来解压文件,用TFileInfoReadOut来分解文件到目录中去。功能已经比较单一了。

如图一所示,现在试着用一个抽象的基类来同时操纵三个可能毫不相关的类,它们的接口函数并不一定统一,强行定义统一的接口可能不太好理解,但是在顶层类还是这样定义了:

     procedure OpBaseList(var ls:TStrings);virtual;abstract; //操纵信息字段

     procedure OpFileList;virtual;abstract;              //操纵所有文件  

OpBaseList函数是操纵文件前所加的其他信息字段,OpFileList将操纵所有的文件,因为是纯抽象的函数,即不用去实现它们,(另外需要说明的是,顶层类根据可能还需要扩充更多的接口函数)。在顶层类里维护了一个文件信息列表:FileListTStringList,包含了所有文件的路径列表。(所有类只列出接口,详细请看源码)

Type TFileInfo=Class(TPersistent)

      public

        Procedure OpBaseList(var ls:TStrings);virtual;abstract; //操纵信息字段

        Procedure OpFileList;virtual;abstract;              //操纵所有文件

  end;

 

关键的一步在于建立装饰类:

 Type TFileDecorator=Class(TFileInfo)

public

      Constructor Create(FileInfo:TFileInfo);

      procedure OpBaseList(var ls:TStrings);override;

      procedure OpFileList;override;

 end;

也许装饰类看以来比较怪异,他维护了一个TFileInfo的私有对象,事实上它是连接其他从TFileInfo类继承的对象的连接者,m_FileInfo对象引用了构造函数传进的对象FileInfo.

Constructor TFileDecorator.Create(FileInfo: TFileInfo);

begin

   m_FileInfo:=FileInfo;

end;

OpBaseListOpFileList接口中看起来更为简单:

procedure TFileDecorator.OpBaseList(var ls: TStrings);

begin

//  inherited;

  if m_FileInfo<>nil then

     m_FileInfo.OpBaseList(ls);

end;

 

[1] [2] [3]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台