装饰模式在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
總結
以上是生活随笔為你收集整理的装饰模式在Intermec CK1应用程序中通讯模块的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64位进程调用32位dll的解决方法
- 下一篇: 中国足球十八怪