亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Observer模式與Command模式在條碼采集系統(tǒng)中的應(yīng)用研究

        2009-04-29 00:00:00焦付強(qiáng)閔聯(lián)營(yíng)裴朝舉
        電腦知識(shí)與技術(shù) 2009年4期

        摘要:結(jié)合條碼采集系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā),探討了設(shè)計(jì)模式中的Observer模式與Command模式,結(jié)果表明:使用Observer模式進(jìn)行數(shù)據(jù)管理,使用Command模式進(jìn)行功能管理,可以增強(qiáng)系統(tǒng)代碼的重用性、靈活性和模塊化,提高了系統(tǒng)開(kāi)發(fā)效率。

        關(guān)鍵詞:設(shè)計(jì)模式;Observer模式;Command模式

        中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)04-1002-02

        The Research about Application of Observer Pattern and Command Pattern in Barcodes Collecting System

        JIAO Fu-qiang1, MIN Lian-ying1, ZHAO Hui2, PEI Chao-ju1

        (1.Computer Department, Wuhan University of Technology, Wuhan 430063, China ;2 Basic Department, Henan Business College,Zhengzhou 450044, China)

        Abstract: The discussion of Observer Pattern and Command Pattern based on the designing and development of the Barcodes Collecting System come to the conclusion that the using of Observer Pattern and Command Pattern in the Barcodes Collecting System enhanced the reusability, flexibility and modularity of the codes of the Barcodes Collecting System and improve the development efficiency of the system.

        Key words: design pattern; observer pattern; command pattern

        1 引言

        近年來(lái),隨著信息技術(shù)的飛速發(fā)展,各企業(yè)紛紛組建起自己的信息管理系統(tǒng)。產(chǎn)品入庫(kù)與售后服務(wù)是企業(yè)生產(chǎn)的重要環(huán)節(jié),同時(shí)也是企業(yè)管理系統(tǒng)數(shù)據(jù)的第一手資料來(lái)源,所以更應(yīng)該重視其數(shù)據(jù)的準(zhǔn)確性、有效性及全面性。文中將介紹基于SmartArm2200+μcLinux+QT的手持設(shè)備上實(shí)現(xiàn)的條碼采集系統(tǒng),本文只討論上層軟件以及實(shí)現(xiàn)過(guò)程中Observer模式和Command模式的應(yīng)用。

        2 設(shè)計(jì)模式

        設(shè)計(jì)模式描述了在面向?qū)ο筌浖O(shè)計(jì)過(guò)程中針對(duì)特定問(wèn)題的簡(jiǎn)潔而優(yōu)雅的解決方案。

        設(shè)計(jì)模式最重要的思想是“封裝變化的概念”。一方面,設(shè)計(jì)的軟件具有一定的靈活性,以適應(yīng)可能的變化;另一方面,把這種復(fù)雜性所帶來(lái)的軟件復(fù)雜性進(jìn)行封裝,為外界提供一個(gè)簡(jiǎn)單而又穩(wěn)定的訪問(wèn)接口。

        3 條碼采集系統(tǒng)簡(jiǎn)介

        該條碼采集系統(tǒng)主要通過(guò)掃描傳感器掃入條碼數(shù)據(jù),經(jīng)過(guò)系統(tǒng)的加工,通過(guò)通信接口傳入上位機(jī)。它的主要功能:采集傳感器轉(zhuǎn)換后的條碼信息并將其顯示在LCD顯示屏上,用戶(hù)通過(guò)鍵盤(pán)向系統(tǒng)提出自已的要求,條碼采集系統(tǒng)通過(guò)處理按鍵消息以及菜單消息以響應(yīng)用戶(hù)提出的要求,實(shí)現(xiàn)用戶(hù)與系統(tǒng)之間的交互。本系統(tǒng)以條碼信息、地址信息、索引信息,條碼類(lèi)型的組合為基本操作單位(簡(jiǎn)稱(chēng)條碼記錄)。本系統(tǒng)主要處理三種類(lèi)型的條碼記錄,它們是:無(wú)符加信息的條碼記錄,入庫(kù)產(chǎn)品條碼記錄和銷(xiāo)售產(chǎn)品條碼記錄。本系統(tǒng)實(shí)現(xiàn)了入庫(kù)產(chǎn)品與銷(xiāo)售產(chǎn)品信息采集與處理功能。條碼采集系統(tǒng)共分為五個(gè)功能模塊,分別為:

        1) 用戶(hù)界面顯示模塊:完成條碼信息采集,然后將條碼信息顯示在界面上。負(fù)責(zé)用戶(hù)與系統(tǒng)之間的交互,正確地將信息顯示在添加頁(yè)面、刪除頁(yè)面、修改頁(yè)面,預(yù)覽頁(yè)面。

        2) 業(yè)務(wù)邏輯模塊:主要完成對(duì)條碼記錄中各個(gè)數(shù)據(jù)單元(條碼信息、地址信息、索引信息等)按照預(yù)定好的規(guī)則進(jìn)行修改、刪除、添加等操作。

        3) 數(shù)據(jù)存儲(chǔ)模塊:將處理過(guò)的數(shù)據(jù)按照預(yù)先設(shè)定好的格式存儲(chǔ)。

        4) 數(shù)據(jù)通信模塊:以預(yù)先制定的通信協(xié)義組織、驗(yàn)證通信數(shù)據(jù);負(fù)責(zé)該手持設(shè)備與外部設(shè)備通過(guò)串口穩(wěn)定而正確地進(jìn)行通信。

        5) 條碼解析模塊:識(shí)別條碼記錄的類(lèi)型,如果是入庫(kù)產(chǎn)品條碼記錄與銷(xiāo)售產(chǎn)品條碼記錄,則根據(jù)相應(yīng)的檢驗(yàn)規(guī)則判定待檢驗(yàn)條碼記錄的合法性。如果條碼記錄合法,則按照預(yù)先的設(shè)定的規(guī)則對(duì)條碼進(jìn)行解析,提取出有效信息,顯示在預(yù)覽頁(yè)面上。

        4 Observer模式、Command模式在條碼采集系統(tǒng)中的應(yīng)用

        4.1 系統(tǒng)設(shè)計(jì)分析

        本系統(tǒng)中存在的兩個(gè)問(wèn)題是:

        1) 當(dāng)發(fā)生業(yè)務(wù)邏輯動(dòng)作,條碼記錄的內(nèi)容或數(shù)量發(fā)生變化,而與條碼記錄的顯示頁(yè)面卻不能及時(shí)地反映數(shù)據(jù)的變化。如當(dāng)新增一條條碼記錄時(shí),由于修改頁(yè)面與預(yù)覽頁(yè)面沒(méi)有得到數(shù)據(jù)變化的消息,因此顯示的數(shù)據(jù)(條碼記錄數(shù)等)便與實(shí)際數(shù)據(jù)不一致了;當(dāng)我們?cè)趧h除頁(yè)面刪除最后一條記錄,修改頁(yè)面與預(yù)覽頁(yè)面卻顯示還有一條條碼記錄;當(dāng)把一條入庫(kù)條碼記錄修改為銷(xiāo)售條碼記錄,但由于預(yù)覽、刪除頁(yè)面沒(méi)有得到通知,它們顯示未修時(shí)的條碼記錄信息。 這必將給企業(yè)生產(chǎn)上和管理上帶來(lái)很大的麻煩,造成不必要的浪費(fèi)和損失。

        2) 我們對(duì)三種類(lèi)型的條碼記錄進(jìn)行操作,可以用枚舉型值來(lái)標(biāo)識(shí)三種類(lèi)型,如0,1,2分別代表無(wú)符加信息條碼記錄、入庫(kù)產(chǎn)品條碼記錄和銷(xiāo)售產(chǎn)品條碼記錄,如果我們想讓0代表入庫(kù)產(chǎn)品條碼記錄,1代表無(wú)符加信息條碼記錄,那么與類(lèi)型相關(guān)的代碼均需要修改;如果我們要新增一種條碼記錄,則要新增類(lèi)型枚舉定義,新類(lèi)型賦值,新類(lèi)型判別相關(guān)代碼;這樣命令的發(fā)出者與執(zhí)行者緊密耦合,進(jìn)行修改時(shí)工作量大,容易出錯(cuò)。

        為解決以上兩個(gè)問(wèn)題,本文只討論Observer模式、Command模式在用戶(hù)界面顯示模塊以及業(yè)務(wù)邏輯模塊中的應(yīng)用,其結(jié)構(gòu)圖如圖1所示。

        條碼采集系統(tǒng)使用MVC(Model-View-Controller)整體框架。模型(Model)(Data類(lèi))用于表示數(shù)據(jù)和業(yè)務(wù)規(guī)則,模型返回的數(shù)據(jù)是與數(shù)據(jù)格式無(wú)關(guān)的,一個(gè)模型號(hào)能為多個(gè)視圖提供數(shù)據(jù)。視圖(View)(Page類(lèi))是用戶(hù)看到并與之交互的界面??刂破鳎–ontroller)

        (MyManager類(lèi))接受用戶(hù)的輸入并調(diào)用視圖去完成用戶(hù)的需求。當(dāng)用戶(hù)按鍵時(shí),控制器本身不輸出任何東西和做任何處理。它只是接收請(qǐng)求并決定調(diào)用哪個(gè)模型去處理請(qǐng)求,然后確定用哪個(gè)視圖來(lái)顯示模型處理返回的數(shù)據(jù),負(fù)責(zé)一部分職能。如果某一部分的需求發(fā)生變化,只需改動(dòng)相應(yīng)的部分即可??墒瓜到y(tǒng)開(kāi)發(fā)工作更加系統(tǒng)化、模塊化,更能體現(xiàn)面向?qū)ο蟮脑O(shè)計(jì)思想,提高了系統(tǒng)的可擴(kuò)展性。

        4.2 Observer模式在顯示模塊的應(yīng)用

        Observer模式的意圖是:“定義對(duì)象間的一種一對(duì)多依賴(lài)關(guān)系,當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),所有依賴(lài)于它的對(duì)象都得到通知并被自動(dòng)更新”[2]。

        使用Observer模式,可以使本系統(tǒng)在用戶(hù)界面和業(yè)務(wù)邏輯之間劃分清晰的界限。Data即為Subject,Page即為Observer,當(dāng)主體對(duì)象中發(fā)生更改時(shí),觀察者就會(huì)觀察這種更改,并相應(yīng)地更新其顯示。

        下面以AddPage為例子,詳細(xì)描述了Observer模式在本系統(tǒng)的應(yīng)用過(guò)程。在這個(gè)過(guò)程中涉及到的類(lèi)以及類(lèi)的主要方法如圖2所示。

        主體(ConcreteData)維護(hù)一個(gè)類(lèi)型為vector的容器變量,用來(lái)存放觀察本主體的觀察者,由于容器本身的性質(zhì),使得主體可以支持多個(gè)觀察者,這使得主體有可能向多個(gè)觀察者通知所發(fā)生的狀態(tài)變化,而不是一個(gè)。首先觀察者AddPage調(diào)用Register方法,將指向ConcreteData的指針作為參數(shù)傳遞,主體將此觀察者存儲(chǔ)在容器變量中,以便在將來(lái)某個(gè)時(shí)間狀態(tài)發(fā)生變化是通知觀察者。當(dāng)條碼記錄的某一項(xiàng)發(fā)生變化(被修改、刪除等),主體通過(guò)GetPage方法來(lái)檢索所有的觀察者,主體然后枚舉被檢索的觀察者,并調(diào)用NotifyPage方法以通知觀察者所發(fā)生的狀態(tài)變化。當(dāng)觀察者(AddPage)不再需要觀察主體(ConcreteData)時(shí),觀察者(AddPage)調(diào)用UnRegister方法以結(jié)束觀察過(guò)程。

        另處,觀察者與主體均采用面向接口的技術(shù)實(shí)現(xiàn),利用這些接口有助于減少觀察者和主體這間的耦合關(guān)系,使得觀察者和主體都可以獨(dú)立地發(fā)生結(jié)構(gòu)上的變化,而使另一方受到較小的影響。這種方法將接口編程模型的優(yōu)點(diǎn)擴(kuò)展到本系統(tǒng)中。

        4.3 Command模式在業(yè)務(wù)邏輯模塊的應(yīng)用

        Command模式的意圖是:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶(hù)進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤消的操作[3]。每一個(gè)命令都是一個(gè)操作:請(qǐng)求的一方發(fā)出請(qǐng)求要求執(zhí)行一個(gè)操作;接收的一方收到請(qǐng)求,并執(zhí)行操作。命令模式允許請(qǐng)求的一方和接收的一方獨(dú)立開(kāi)來(lái),使得請(qǐng)求的一方不必知道接收請(qǐng)求的一方的接口,更不必知道請(qǐng)求是怎么被接收,以及操作是否被執(zhí)行、何時(shí)被執(zhí)行,以及是怎么被執(zhí)行的。

        條碼采集系統(tǒng)的核心問(wèn)題是對(duì)條碼信息進(jìn)行處理,系統(tǒng)中有修改、添加、刪除等數(shù)據(jù)操作,在業(yè)務(wù)邏輯模塊使用Command模式使該系統(tǒng)層次更加分明,職責(zé)更加明確,結(jié)構(gòu)更加清晰,系統(tǒng)更加容易擴(kuò)展。

        下面以AddCom為例子,詳細(xì)描述了Command模式在本系統(tǒng)的應(yīng)用過(guò)程。在這個(gè)過(guò)程中涉及到的類(lèi)以及類(lèi)的主要方法如圖3所示。

        請(qǐng)求者(MyManger)維護(hù)一個(gè)類(lèi)型為vector的容器變量,用來(lái)存放多個(gè)請(qǐng)求對(duì)象,當(dāng)用戶(hù)要進(jìn)行操作時(shí),使用GetCommand方法得到命令對(duì)象(AddCom),然后調(diào)用Execute方法。其中Command類(lèi)作為接口,只有一個(gè)統(tǒng)一的方法,不同的命令類(lèi)對(duì)應(yīng)接口不同的實(shí)現(xiàn)。AddCom類(lèi)即為添加操作對(duì)應(yīng)的類(lèi),它是Command類(lèi)的一個(gè)具體的實(shí)現(xiàn),AddCom通過(guò)委托實(shí)現(xiàn)具體的添加操作。這樣,MyManager對(duì)于它實(shí)際調(diào)用的對(duì)象AddAction是一無(wú)所知的,它只知道當(dāng)代表添加的鍵按下的時(shí)候就調(diào)用AddCom的Execute()方法;AddAction當(dāng)然更不知道誰(shuí)在調(diào)用它。通過(guò)這種方式,我們實(shí)現(xiàn)了調(diào)用者(MyManager)和接收者(AddCom)的解耦。如果將來(lái)我們需要對(duì)這個(gè)MyManager進(jìn)行擴(kuò)展,只需要再添加一個(gè)實(shí)現(xiàn)了Command接口的對(duì)象就可以了,對(duì)于MyManager無(wú)需做任何修改。然后通過(guò)AddCommand方法向請(qǐng)求者所維護(hù)的容器變量中添入新的命令對(duì)象指針,實(shí)現(xiàn)用戶(hù)添加操作的意圖。在請(qǐng)求者(MyManager)與接收者(AddAction)之間增加一個(gè)中間層,隔離了請(qǐng)求者與接收者,降低了請(qǐng)求者與接收者之間的耦合度,增強(qiáng)代碼的健壯性、可維護(hù)性和復(fù)用性。

        5 結(jié)束語(yǔ)

        實(shí)踐證明,將Observer模式和Command模式引入到條碼采集系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)中,有效提高了軟件開(kāi)發(fā)的效率,保證了代碼的可重用性和系統(tǒng)的可擴(kuò)展性,可以滿(mǎn)足不斷增長(zhǎng)的不同用戶(hù)的不同業(yè)務(wù)需求。設(shè)計(jì)模式使軟件設(shè)計(jì)人員能夠快速地根據(jù)問(wèn)題找到對(duì)應(yīng)的解決方案。借鑒他人的成功經(jīng)驗(yàn),既可以將其應(yīng)用于整體的軟件架構(gòu)設(shè)計(jì),也可應(yīng)用與軟件中某一部分的微體系結(jié)構(gòu)設(shè)計(jì)。對(duì)設(shè)計(jì)模式的理解和運(yùn)用需要我們?cè)趯?shí)踐中不斷地摸索和總結(jié)。

        參考文獻(xiàn):

        [1] Gamma E,Helm R,Champaign U,et al.設(shè)計(jì)模式——可復(fù)用面向?qū)ο筌浖幕A(chǔ)[M].李英軍,譯.北京:機(jī)械工業(yè)出版社,2005.

        [2] Parikh G.Software Support, Management, and Evolution in the Coming Decade and Beyond Opportunities Challenges[C]//Proceedings of the 21st IEEE International Conference on Software Maintenance,Washington, D. C. 2005.

        [3] 劉海巖,鎖志海,呂青,等.設(shè)計(jì)模式及其在軟件設(shè)計(jì)中的應(yīng)用研究[J].西安交通大學(xué)學(xué)報(bào),2005,39(10):1043-1047.

        日本免费一区二区久久久| 一本久道综合色婷婷五月 | 国产视频一区2区三区| 久青草影院在线观看国产| 黑人巨茎大战欧美白妇| 天天狠天天透天干天天| 午夜国产在线精彩自拍视频| 亚洲av综合国产av日韩| 午夜免费电影| 人妻少妇看a偷人无码精品| 成人无码视频在线观看网站| 女人天堂av免费在线| 麻豆国产精品久久人妻| 末发育娇小性色xxxxx视频| 男人的天堂av网站一区二区| 亚洲一区二区三区福利久久蜜桃 | 成年男人午夜视频在线看| 午夜被窝精品国产亚洲av香蕉 | 国产成人无码免费视频在线 | 久久久99精品视频| 国产精品一区二区韩国av| 中文字幕日本人妻久久久免费| 久久国产热这里只有精品| 日本欧美小视频| 国产亚洲精品成人av在线| 国产91传媒一区二区三区| 天天综合网天天综合色| 乱中年女人伦av三区| 伊人亚洲综合影院首页| 亚洲一区二区三区少妇| 国产一极内射視颍一| 午夜a福利| 91精品亚洲熟妇少妇| 2019最新中文字幕在线观看| 玖玖资源站无码专区| 天堂视频一区二区免费在线观看| 国产精品黑丝高跟在线粉嫩 | 久青草国产视频| 中文字幕一区二区人妻在线不卡 | 成人一区二区三区蜜桃| 精品无码久久久久久久久|