3.2闁€闈㈡ā寮�銆佸伐寤犳ā寮忓皪(du矛)澶栭儴鏆撮湶API鎺ュ彛
鐐轰簡閬垮厤鍚庤嚭(t谩i)鎳�(y墨ng)鐢ㄧ郴绲�(t菕ng)锛屽嵆涓枔浠剁殑瀹㈡埗绔亷鍒嗚€﹀悎锛岄噰鐢ㄩ杸闈㈡ā寮忥紙Facade锛夊皪(du矛)绯荤当(t菕ng)鍏�(n猫i)閮�銆佸閮ㄥ(sh铆)鐝�(xi脿n)娓呮櫚鐨勯殧闆�銆傝檿鐞嗘祦绋嬪彲鍙冭鍦�6鎵€绀虹殑搴忓垪鍦�?锛熻浕鑸宠棙H鍍呰垏Facade椤炲缓绔嬭伅(li谩n)绯伙紝濡傛灉Facade鎺ュ彛瀹氱京寰楄冻澶犳竻鏅�锛屽鎴剁鍙互灏�(du矛)涓枔浠剁殑鍏�(n猫i)閮ㄥ(sh铆)鐝�(xi脿n)涓€鐒℃墍鐭�锛岄€欓珨鐝�(xi脿n)浜嗛潰鍚�?q奴)慰绗炬濮嗗簨b鎬с€�

椤炵殑瑷�(sh猫)瑷�(j矛)鍙冭婧愪唬纰肩ず渚�锛屽緸涓彲浠ョ湅鍑�锛岄噰鐢ㄧ啊(ji菐n)鍠伐寤犳ā寮忥紙Simple Factory锛夎兘澶犲湪瀹㈡埗绔笉鐭ユ儏鐨勬儏娉佷笅锛岄潏娲诲湴鏇挎彌API瀵�(sh铆)鐝�(xi脿n)椤炵殑鐗堟湰銆備腑闁撲欢API鎺ュ彛娓呮櫚鍦板畾缇╀簡涓枔浠舵彁渚涚殑鎿嶄綔锛屽鎴剁鍙爤鐭ラ亾宸ュ粻椤烇紙APIFactory锛夎兘澶犲緱鍒颁腑闁撲欢API鎺ュ彛鐨勫(sh铆)渚嬪嵆鍙�銆�
涓枔浠禔PI鎺ュ彛MiddlewareAPI锛�
publicinterfaceMiddlewareAPI锝�
void define锛圫tring specName, ECSpec spec锛�;
void undefine锛圫tring specName锛�;
void subscribe锛圫tring specName, String uri锛�;
void unsubscribe锛圫tring specName, String uri锛�;
EPCReports poll锛圫tring specName锛�;
EPCReports immediate锛圗CSpec spec锛�;
&nnbsp; 锝�
宸ュ粻椤濧PIFactory锛�
publicclassAPIFactory锝�
publicstaticMiddlewareAPIgetAPIInstance锛堬級锝�
锝�
锝�
API鐨� 瀵�(sh铆)鐝�(xi脿n)椤濧锛�
publicclassClient锝�
publicstaticvoidmain锛圫tring[] 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)妯″紡锛坰tate锛変締妯℃摤瑕�(gu墨)鍓囩殑鐙€鎱�(t脿i)姗�(j墨)锛屽皣涓嶅悓鐙€鎱�(t脿i)鐨勪笉鍚岃〃鐝�(xi脿n)浣滅偤鍙畩鍖栧洜绱犲皝瑁濊捣渚嗭紝鍙冭浠g⒓绀轰緥銆�
瑕�(gu墨)鍓囩媭鎱�(t脿i)鎺ュ彛ECState锛�
publicinterfaceECState锝�
voidsubscribe锛圫tringspecName,String uri锛�;
voidunsubscribe锛圫tringspecName,String uri锛�;
EPCReportspoll锛圫tringspecName锛�;
锝�
鏈璜�(q菒ng)姹傜媭鎱�(t脿i)椤濫CStateUnrequested锛�
publicclassECStateUnrequestedimplements ECState 锝�
锝�
宸茶璜�(q菒ng)姹傜媭鎱�(t脿i)椤濫CStateRequested锛�
publicclassECStateRrequestedimplements ECState 锝�
锝�
婵€娲荤媭鎱�(t脿i)椤濫CStateActive锛�
; publicclassECStateActiveimplements ECState 锝�
锝�
瑕�(gu墨)鍓囬ECSpec锛�
publicclassECSpec锝�
privateECStatestate;
publicECStategetState锛堬級锝�
return state;
锝�
publicvoidsetState锛圗CStatestate锛� 锝�
this.state = state;
锝�
锝�
閫欐ǎ锛屽湪閲濆皪(du矛)瑕�(gu墨)鍓囧(sh铆)鏂界浉鎳�(y墨ng)鎿嶄綔鐨勬檪(sh铆)鍊�锛屽氨鍙互鐩存帴鎶婄浉鎳�(y墨ng)鎿嶄綔濮旀淳绲﹀叾鐙€鎱�(t脿i)灞€э紙ECState锛夊幓鍋氬嵆鍙�銆傛瘮濡�锛孍CSpec鐨剆ubscribe鎿嶄綔锛屽彧闇€涓€琛屼唬纰尖€渟tate.suscribe锛坰pecName, uri锛�;鈥濆嵆鍙�銆傚叾涓�锛宻pecName銆乽ri鐐鸿嚚鏅�(sh铆)璁婇噺锛屽叿楂斿彇鍊煎湪鏂规硶瑾�(di脿o)鐢ㄤ箣鍓嶇⒑瀹�銆�
鐢遍潰鍚�?q奴)慰锜憨閯矪(t脿i)鎬х壒寰�锛屾牴鎿�(j霉)state瀛楁鐩墠鎵€鎸囧悜鐨勫皪(du矛)璞′締鍕�(d貌ng)鎱�(t脿i)纰哄畾鐢盓CState鎺ュ彛鐨勫摢涓€鍊�(g猫)鍏烽珨鐨勫(sh铆)鐝�(xi脿n)椤炵殑浠g⒓渚嗗畬鎴愬伐浣溿€侲CState鎺ュ彛鐨勫(sh铆)鐝�(xi脿n)椤炴牴鎿�(j霉)瀵�(sh铆)闅涙儏娉佺⒑瀹氭槸鍚﹂渶瑕佸湪铏曠悊閬庣▼涓慨鏀笶CSpec灏�(du矛)璞$殑鐙€鎱�(t脿i)灞€э紙state锛�锛屾铏曞湪鎳�(y墨ng)鐢ㄧ媭鎱�(t脿i)妯″紡鏅�(sh铆)锛岄渶瑕佽ō(sh猫)瑷�(j矛)澶氬€�(g猫)瀹氭檪(sh铆)鍣ㄩ渚嗚紨鍔╃媭鎱�(t脿i)姗�(j墨)鐨勮烦杞�(zhu菐n)[3]銆�
3.4绛栫暐妯″紡鍒囨彌澶氱ó鍫�(b脿o)鍛婁笂鍌�銆佸懡浠や笅鐧�(f膩)鏂瑰紡
浜嬩欢鍛ㄦ湡绲�(ji茅)鏉熶箣鍚�锛屼腑闁撲欢闇€瑕佺祫瑁濆牨(b脿o)鍛婁笂鍌崇郸瑕�(gu墨)鍓囩殑闋�(y霉)瑷傝€�锛屽嵆鎳�(y墨ng)鐢ㄧ郴绲�(t菕ng)銆備笂鍌崇殑鏂瑰紡鏈夊绋�锛屽HTTP銆丼ocket銆丣MS绛夌瓑銆備腑闁撲欢鐨勬牳蹇冮倧杓檿鐞嗘ā濉婁笉鎳�(y墨ng)瑭查棞(gu膩n)蹇冨叿楂旂殑涓婂偝鎶€琛�(sh霉)锛岀浉鎳�(y墨ng)宸ヤ綔鎳�(y墨ng)浜ょ郸鍫�(b脿o)鍛婁笂鍌虫ā濉婁締鍋氾紝鏍稿績閭忚集铏曠悊妯″鍙爤瀹屾垚鑷繁鐨勫伐浣�锛岀劧鍚庢妸涓€瀹氭牸寮忕殑鏁�(sh霉)鎿�(j霉)閫氶亷鍫�(b脿o)鍛婁笂鍌虫ā濉婄櫦(f膩)閫�锛屽弮瑕嬩唬纰肩ず渚�銆�
鍫�(b脿o)鍛婄櫦(f膩)閫佹帴鍙eportSender锛�
publicinterfaceReportSender锝�
& nbsp; voidsendReport锛圗CReportsreports锛�;
锝�
閫氶亷Http鏂瑰紡鐧�(f膩)閫佸牨(b脿o)鍛婄殑ReportSender鎺ュ彛瀵�(sh铆)鐝�(xi脿n)椤濺eportSenderByHttp锛�
publicclassReportSenderByHttpimplements ReportSender 锝�
public void sendReport锛圗CReports reports锛� 锝�
锝�
锝�
閫氶亷Socket鏂瑰紡鐧�(f膩)閫佸牨(b脿o)鍛婄殑ReportSender鎺ュ彛瀵�(sh铆)鐝�(xi脿n)椤濺eportSenderBySocket锛�
publicclassReportSenderBySocketimplements ReportSender 锝�
publicvoidsendReport锛圗CReportsreports锛� 锝�
锝�
锝�
閫氶亷JMS鏂瑰紡鐧�(f膩)閫佸牨(b脿o)鍛婄殑ReportSender鎺ュ彛瀵�(sh铆)鐝�(xi脿n)椤濺eportSenderByJms锛�
publicclassReportSenderByJmsimplements ReportSender 锝�
publicvoidsendReport锛圗CReportsreports锛� 锝�
锝�
锝�
鍫�(b脿o)鍛婄櫦(f膩)閫佺ず渚嬪鎴剁椤�
SendReportWorker锛�
publicclassSendReportWorker锝�
privateReportSendersender;
privateECReportsreports;
&
nbsp; publicvoidsetReports锛圗CReportsreports锛� 锝�
this.reports = reports;
锝�
publicstaticvoidmain锛圫tring[] args锛� 锝�
SendReportWorker worker = new
SendReportWorker锛堬級;
worker.sender.sendReport锛坮eports锛�;
锝�
publicvoidsetSender锛圧eportSendersender锛� 锝�
this.sender = sender;
锝�
锝�
閫欐ǎ锛岀櫦(f膩)閫佹秷鎭殑宸ヤ汉椤炲彲閫氶亷瑷�(sh猫)缃甊eportSender鐨勫(sh铆)渚嬩締闈堟椿瑷�(sh猫)缃叾鐧�(f膩)閫佹柟寮忋€�
鍚屾ǎ锛屼腑闁撲欢鐨勬竻榛�(di菐n)鍛戒护涓嬬櫦(f膩)锛屽嵆涓枔浠惰垏闁辫畝鍣ㄤ箣闁撶殑鎺ュ彛锛屼篃瀛樺湪澶氱ó鏂瑰紡锛屽Socket銆丼OAP绛�锛屼篃鍙噰鐢ㄩ浼肩殑瑷�(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猫)浜熷緟瑙f焙鐨勫晱椤�銆�
寰炶粺浠堕儴缃诧紙閮ㄧ讲鍦ㄥ悓涓€鑷�(t谩i)涓绘(j墨)涓婏級銆佽粺浠舵ā濉婇噸鐢紙閲嶇敤闁辫畝鍣ㄩ€氫俊妯″锛夌瓑瑙掑害鑰冩叜锛屼腑闁撲欢鑸囬柋璁€鍣ㄧ鐞嗙郴绲�(t菕ng)鐨勮瀺鍚堝嫝(sh矛)蹇呮垚鐐轰腑闁撲欢鏈韩鐨勪竴鍊�(g猫)鍎�(y艒u)鍕�(sh矛)銆�
4.2灏�(du矛)澶氭(bi膩o)婧�(zh菙n)妯�(bi膩o)绨界殑鏀寔
RFID鎶€琛�(sh霉)鍦ㄥ湅鍏�(n猫i)澶栫殑鐧�(f膩)灞曞拰鎳�(y墨ng)鐢ㄦ柟鑸堟湭鑹撅紝鍦嬮殯涓婂鍊�(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矛)澶氬粻鍟嗛柋璁€鍣ㄧ殑鏀寔
涓枔浠惰垏闁辫畝鍣ㄤ箣闁撶殑鎺ュ彛銆侀€氫俊鏂瑰紡浠ュ強淇℃伅鏍煎紡锛屼篃鐒℃硶鍋氬埌绲�(t菕ng)涓€妯�(bi膩o)婧�(zh菙n)銆傚皪(du矛)澶氬粻鍟嗛柋璁€鍣ㄧ殑鏀寔銆佽嚦灏戝皪(du矛)灏戞暩(sh霉)骞惧涓绘祦寤犲晢鐨勯柋璁€鍣ㄧ殑鏀寔锛屽凡缍�(j墨ng)鏄皪(du矛)涓枔浠舵墍鎻愬嚭鐨勫熀鏈姹�銆�