装饰模式在Intermec CK1应用程序中通讯模块的应用

 

        学习设计模式已经已经有一段时间了,一直没机会再实践中应用,没想到第一次成功使用设计模式的思想会是在SD结构的程序中。

        这次分配下来一个比较急的任务,要求在原有通讯模块的基础上添加发送头包的功能,由于对原来程序通讯机制不是很了解,并且时间确实比较紧,因此没法重写这部分函数。研究了一下通讯模块中从文件中建立数据包的部分,发现程序中没有单独封包的函数,而是直接根据输入不同的包编号从文件直接定位该包的位置,读取256个字节,返回数据包中数据内容。这样若想添加的新数据包不再文件当中,就必须更改原来的函数才能实现。

        原函数如下:

void xs_get_data_package(LONG i_package_sn,  CHAR** ppc_data,  FILE* pf_upload_data_file)

{

        根据传输的i_package_sn不同,从文件 pf_upload_data_file中建立数据包,由ppc_data返回数据包

}

      对该函数进行分析,发现实际上我要加入头包,同时也需要从文件中获得的数据包,并且头包对从文件中的得到数据包来说没有影响。因此考虑是否可以增加一个装饰函数,在原有函数功能的基础上增加新的功能我所需要的添加头包的功能。装饰适配器函数的原形如下:

void adpter_xs_get_data_package(LONG i_package_sn,  CHAR** ppc_data,  FILE* pf_upload_data_file,CHAR**head_packet)

{    //head_packet为头包中的数据

                if (i_package_sn==0)
                {
                      根据head_packet组装头包
                      return HR_OK;
                }
                hr=xs_get_package_from_file(i_package_sn-1,ppc_data, pf_upload_data_file);
                return hr;

}

计算文件中总包数的函数

                int xs_get_data_package_count(char *package_sn,char *fp_upload_data_file);

该函数根据文件的不同计算包的总数,由于增加了头包,因此包总数需要+1,装饰适配器函数如下:

               int adpter_xs_get_data_package_count(char *package_sn,char *fp_upload_data_file)

              {

                                return xs_get_data_package_count(char *package_sn,char *fp_upload_data_file)+1;

              }

本来需要从写数据包分配和相应的通讯部分函数的问题迎刃而解,算上测试总共花了不到3小时 :)

该程序虽然简单,但是充分体现出了设计模式中思想的重要性,如果不是第一时间的想到设计模式中模式,很可能需要修改原函数本身,这样肯定需要先了解原函数中程序的运行机制,增加了时间,并且不知道整个程序中是否还有其他位置调用到了这些函数,因此可能会引入意想不到的错误。采用设计模式思想,很轻松的解决了上述问题,高质量的完成了工作。

转载于:https://www.cnblogs.com/wude/archive/2007/06/29/1941647.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值