<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > RFID中間件技術(shù)探秘

          RFID中間件技術(shù)探秘

          作者: 時(shí)間:2018-08-13 來(lái)源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/201808/386476.htm

          類的設(shè)計(jì)參見源代碼示例,從中可以看出,采用簡(jiǎn)單工廠模式(Simple Factory)能夠在客戶端不知情的情況下,靈活地替換API實(shí)現(xiàn)類的版本。中間件API接口清晰地定義了中間件提供的操作,客戶端只須知道工廠類(APIFactory)能夠得到中間件API接口的實(shí)例即可。

          中間件API接口MiddlewareAPI:

          publicinterfaceMiddlewareAPI{

          void define(String specName, ECSpec spec);

          void undefine(String specName);

          void subscribe(String specName, String uri);

          void unsubscribe(String specName, String uri);

          EPCReports poll(String specName);

          EPCReports immediate(ECSpec spec);

          }

          工廠類APIFactory:

          publicclassAPIFactory{

          publicstaticMiddlewareAPIgetAPIInstance(){

          }

          }

          API的實(shí)現(xiàn)類A:

          publicclassClient{

          publicstaticvoidmain(String[] args) {

          MiddlewareAPI api = APIFactory.getAPIInstance();

          api.define(a new spec, new EPCSpec());

          }

          }

          3.3 狀態(tài)模式模擬規(guī)則的狀態(tài)機(jī)

          規(guī)則在其生命周期中擁有不同的狀態(tài),在每個(gè)狀態(tài)對(duì)一系列操作都有著不同的表現(xiàn),于是可以利用狀態(tài)模式(state)來(lái)模擬規(guī)則的狀態(tài)機(jī),將不同狀態(tài)的不同表現(xiàn)作為可變化因素封裝起來(lái),參見代碼示例。

          規(guī)則狀態(tài)接口ECState:

          publicinterfaceECState{

          voidsubscribe(StringspecName,String uri);

          voidunsubscribe(StringspecName,String uri);

          EPCReportspoll(StringspecName);

          }

          未被請(qǐng)求狀態(tài)類ECStateUnrequested:

          publicclassECStateUnrequestedimplements ECState {

          }

          已被請(qǐng)求狀態(tài)類ECStateRequested:

          publicclassECStateRrequestedimplements ECState {

          }

          激活狀態(tài)類ECStateActive:

          publicclassECStateActiveimplements ECState {

          }

          規(guī)則類ECSpec:

          publicclassECSpec{

          privateECStatestate;

          publicECStategetState(){

          return state;

          }

          publicvoidsetState(ECStatestate) {

          this.state = state;

          }

          }

          這樣,在針對(duì)規(guī)則實(shí)施相應(yīng)操作的時(shí)候,就可以直接把相應(yīng)操作委派給其狀態(tài)屬性(ECState)去做即可。比如,ECSpec的subscribe操作,只需一行代碼“state.suscribe(specName, uri);”即可。其中,specName、uri為臨時(shí)變量,具體取值在方法調(diào)用之前確定。

          由面向?qū)ο蟮亩鄳B(tài)性特征,根據(jù)state字段目前所指向的對(duì)象來(lái)動(dòng)態(tài)確定由ECState接口的哪一個(gè)具體的實(shí)現(xiàn)類的代碼來(lái)完成工作。ECState接口的實(shí)現(xiàn)類根據(jù)實(shí)際情況確定是否需要在處理過(guò)程中修改ECSpec對(duì)象的狀態(tài)屬性(state),此處在應(yīng)用狀態(tài)模式時(shí),需要設(shè)計(jì)多個(gè)定時(shí)器類來(lái)輔助狀態(tài)機(jī)的跳轉(zhuǎn)。

          3.4 策略模式切換多種報(bào)告上傳、命令下發(fā)方式

          事件周期結(jié)束之后,中間件需要組裝報(bào)告上傳給規(guī)則的預(yù)訂者,即應(yīng)用系統(tǒng)。上傳的方式有多種,如HTTP、Socket、JMS等等。中間件的核心邏輯處理模塊不應(yīng)該關(guān)心具體的上傳技術(shù),相應(yīng)工作應(yīng)交給報(bào)告上傳模塊來(lái)做,核心邏輯處理模塊只須完成自己的工作,然后把一定格式的數(shù)據(jù)通過(guò)報(bào)告上傳模塊發(fā)送,參見代碼示例。

          報(bào)告發(fā)送接口ReportSender:

          publicinterfaceReportSender{

          voidsendReport(ECReportsreports);

          }

          通過(guò)Http方式發(fā)送報(bào)告的ReportSender接口實(shí)現(xiàn)類ReportSenderByHttp:

          publicclassReportSenderByHttpimplements ReportSender {

          public void sendReport(ECReports reports) {

          }

          }

          通過(guò)Socket方式發(fā)送報(bào)告的ReportSender接口實(shí)現(xiàn)類ReportSenderBySocket:

          publicclassReportSenderBySocketimplements ReportSender {

          publicvoidsendReport(ECReportsreports) {

          }

          }

          通過(guò)JMS方式發(fā)送報(bào)告的ReportSender接口實(shí)現(xiàn)類ReportSenderByJms:

          publicclassReportSenderByJmsimplements ReportSender {

          publicvoidsendReport(ECReportsreports) {

          }

          }

          報(bào)告發(fā)送示例客戶端類

          SendReportWorker:

          publicclassSendReportWorker{

          privateReportSendersender;

          privateECReportsreports;

          publicvoidsetReports(ECReportsreports) {

          this.reports = reports;

          }

          publicstaticvoidmain(String[] args) {

          SendReportWorker worker = new

          SendReportWorker();

          worker.sender.sendReport(reports);

          }

          publicvoidsetSender(ReportSendersender) {

          this.sender = sender;

          }

          }

          這樣,發(fā)送消息的工人類可通過(guò)設(shè)置ReportSender的實(shí)例來(lái)靈活設(shè)置其發(fā)送方式。

          同樣,中間件的清點(diǎn)命令下發(fā),即中間件與閱讀器之間的接口,也存在多種方式,如Socket、SOAP等,也可采用類似的設(shè)計(jì)。

          3.5 觀察者模式處理上報(bào)消息

          閱讀器的消息上報(bào)轉(zhuǎn)換為消息對(duì)象,對(duì)消息對(duì)象的接收、分發(fā)可采用經(jīng)典的觀察者模式實(shí)現(xiàn)。

          4、中間件發(fā)展方向

          4.1 與閱讀器管理系統(tǒng)的融合

          中間件是閱讀器與后臺(tái)應(yīng)用系統(tǒng)之間的橋梁,而閱讀器通常有設(shè)備管理需求,比如軟件版本下載、設(shè)備告警管理、參數(shù)配置等等,閱讀器管理系統(tǒng)也是直接與閱讀器交互的軟件模塊。于是,如何處理好中間件與閱讀器管理系統(tǒng)之間的關(guān)系成為一個(gè)亟待解決的問(wèn)題。

          從軟件部署(部署在同一臺(tái)主機(jī)上)、軟件模塊重用(重用閱讀器通信模塊)等角度考慮,中間件與閱讀器管理系統(tǒng)的融合勢(shì)必成為中間件本身的一個(gè)優(yōu)勢(shì)。

          4.2 對(duì)多標(biāo)準(zhǔn)標(biāo)簽的支持

          RFID技術(shù)在國(guó)內(nèi)外的發(fā)展和應(yīng)用方興未艾,國(guó)際上多個(gè)標(biāo)準(zhǔn)組織都試圖統(tǒng)一RFID標(biāo)準(zhǔn),但在一定的時(shí)期內(nèi),勢(shì)必出現(xiàn)多標(biāo)簽并存的情況。于是,對(duì)多標(biāo)準(zhǔn)標(biāo)簽的支持也是中間件系統(tǒng)的一個(gè)發(fā)展方向。

          4.3 對(duì)多廠商閱讀器的支持

          中間件與閱讀器之間的接口、通信方式以及信息格式,也無(wú)法做到統(tǒng)一標(biāo)準(zhǔn)。對(duì)多廠商閱讀器的支持、至少對(duì)少數(shù)幾家主流廠商的閱讀器的支持,已經(jīng)是對(duì)中間件所提出的基本要求。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();