999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

觀察者模式中的“拉”模型在電子商務(wù)系統(tǒng)中的應(yīng)用

2014-12-29 00:00:00陳萍萍于衛(wèi)紅陳燕
計(jì)算機(jī)時(shí)代 2014年9期

摘 要: 在電子商務(wù)的大背景下,為了便于客戶網(wǎng)購后對貨物進(jìn)行跟蹤和實(shí)施個(gè)性化查詢,必須建立一個(gè)便于擴(kuò)展和維護(hù)的靈活的電子商務(wù)網(wǎng)站物流查詢系統(tǒng),因此,在系統(tǒng)設(shè)計(jì)過程中引入觀察者設(shè)計(jì)模式中的“拉”數(shù)據(jù)模型。文章介紹了觀察者模式,提出了觀察者模式中的“拉”數(shù)據(jù)模型應(yīng)用到電子商務(wù)物流系統(tǒng)中的思路和方法,給出了UML模型及具體的實(shí)現(xiàn)過程。實(shí)踐證明,基于觀察者模式的“拉”數(shù)據(jù)模型在具體主題和具體觀察者之間建立起一個(gè)松耦合關(guān)系,充分滿足了面向?qū)ο蟮摹伴_閉原則”,且實(shí)現(xiàn)了客戶的個(gè)性化查詢,使得系統(tǒng)的質(zhì)量和開發(fā)效率都得到了很大的提升。

關(guān)鍵詞: 觀察者模式; 電子商務(wù)物流; UML類圖; 面向?qū)ο?/p>

中圖分類號:TP391 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2014)09-49-03

Application of \"pull\" model of observer design pattern into electronic commerce system

Chen Pingping, Yu Weihong, Chen Yan

(Transportation Management College Dalian Maritime University, Dalian, Liaoning 116026, China)

Abstract: Under the background of e-commerce, in order to facilitate customers' tracking and personally querying after shopping, a flexible e-commerce logistics query system convenient for extension and maintenance must be established. The data model \"pull\" in the observer design pattern is introduced into system design process. The ideas and the methods of applying \"pull\" in electronic commerce logistics are introduced. The UML mode and the specific implementation process are given. The practice has proved that the \"pull\" data model based on the observer pattern set up a loose coupling relationship in the specific topic and specific observer. It fully satisfies the object-oriented \"open closed principle\", implements the personalized customer inquiries and improves quality and development efficiency.

Key words: observer design pattern; electronic commerce logistics; UML class diagram; object-oriented

0 引言

消費(fèi)者在電子商務(wù)網(wǎng)站購買物品后,在貨物配送的過程中,貨物物流查詢成為網(wǎng)購者普遍關(guān)心的問題之一。按照傳統(tǒng)電子商務(wù)物流系統(tǒng)設(shè)計(jì)方案:在物流查詢邏輯等類內(nèi)部增加相關(guān)代碼,進(jìn)而完成通知消費(fèi)者貨物送達(dá)地點(diǎn)、快遞公司信息等各種邏輯。此種設(shè)計(jì)方案由于程序間是“緊耦合”關(guān)系,致使一旦某個(gè)物流查詢邏輯發(fā)生改變,便需要修改相關(guān)的核心文件,日積月累后,導(dǎo)致文件冗長,不利于系統(tǒng)的維護(hù)和擴(kuò)展[1]。

觀察者(Observer)模式作為“模式中的皇后”,是Java程序設(shè)計(jì)中應(yīng)用最為廣泛也最為靈活的設(shè)計(jì)模式之一,在現(xiàn)實(shí)應(yīng)用系統(tǒng)中有著廣泛應(yīng)用。觀察者模式設(shè)計(jì)——“拉數(shù)據(jù)”方式不僅實(shí)現(xiàn)了表示層和數(shù)據(jù)邏輯層的分離,在具體主題和具體觀察者之間建立起一個(gè)松耦合關(guān)系,而且可以在具體觀察者得到通知后,調(diào)用具體主題提供的方法得到數(shù)據(jù),由觀察者根據(jù)需要“拉取”數(shù)據(jù)獲取信息,既有利于系統(tǒng)的維護(hù)和擴(kuò)展,又能避免具體主題向觀察者推送不需要的信息,體現(xiàn)出系統(tǒng)設(shè)計(jì)的個(gè)性化和人性化。本文基于觀察者模式——“拉”數(shù)據(jù)方式及支持廣播通信的特性,結(jié)合實(shí)例,分析其在電子商務(wù)物流系統(tǒng)設(shè)計(jì)中的典型應(yīng)用[2]。

1 觀察者模式

1.1 觀察者模式的結(jié)構(gòu)

觀察者模式(Observer)定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個(gè)對象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對象都得到通知并被自動(dòng)更新[3]。當(dāng)主題對象狀態(tài)發(fā)生變化時(shí),通知所有的觀察者對象,使得觀察者能夠自動(dòng)更新自己。觀察者模式有時(shí)也稱為發(fā)布-訂閱( Publish-Subscribe)模式,即:觀察者訂閱主題的消息,主題在事件發(fā)生時(shí)廣播這些消息。如果某個(gè)對象的事件需要告知其他對象,同時(shí)又不想讓前者了解后者的太多信息,就可以使用該模式。觀察者模式的靜態(tài)結(jié)構(gòu)類如圖1所示[4]。

[<>

Subject\+ResisterObserver(Observer)():void

+UnResisterObserver():void

+notifyObserver():void\][ConcreteSubject\\+ResisterObserver(Observer)():void

+UnResisterObserver():void

+notifyObserver():void

+otherMetond():void\][<>

Observer\+update():void\][ConcreteObserver\+subject:Subject\+update():void\]

圖1 觀察者模式結(jié)構(gòu)類圖

觀察者模式由抽象主題、抽象觀察者、具體主題,具體觀察者四類角色組成。

⑴ 主題(Subject)為接口,該接口規(guī)定了具體主題需要實(shí)現(xiàn)的方法,如:添加、刪除觀察者及通知觀察者更新數(shù)據(jù)的方法。

⑵ 抽象觀察者(Observer)為一個(gè)接口,該接口規(guī)定了具體觀察者用來更新數(shù)據(jù)的方法。

⑶ 具體主題(ConcreteSubject)為Observer的具體實(shí)現(xiàn),該實(shí)例包含有可以經(jīng)常發(fā)生變化的數(shù)據(jù),具體主題使用一個(gè)集合存放觀察者的引用,以便數(shù)據(jù)變化時(shí)通知具體觀察者。

⑷ 具體觀察者(ConcreteObserver)為實(shí)現(xiàn)具體觀察者接口類的一個(gè)實(shí)例,其中可以存放具體主題引用的主題接口變量,可以讓具體主題將自己的引用添加到具體主題集合中,使自己成為它的觀察者或者讓此具體主題將自己從具體主題集合中移除,不再成為具體觀察者[5]。

觀察者模式支持廣播通訊,被觀察者會向所有登記過的觀察者發(fā)出通知;此外,觀察者模式在被觀察者和觀察者之間建立起松耦合關(guān)系,觀察者模式的這種“針對抽象編程”的做法體現(xiàn)了面向?qū)ο笤O(shè)計(jì)復(fù)用原則中的“依賴倒轉(zhuǎn)原則”,可以有效減少模塊間的“緊耦合”,有利于提高系統(tǒng)的可維護(hù)性和擴(kuò)展性[6]。

1.2 觀察者模式的兩種方式

觀察者模式有兩種獲得數(shù)據(jù)的模式:“推”數(shù)據(jù)和“拉”數(shù)據(jù)。推數(shù)據(jù)方式中,當(dāng)消息更新時(shí),不管觀察者對這些信息需要與否,具體主題都會將相關(guān)信息通過參數(shù)的形式推送給觀察者;拉數(shù)據(jù)方式中,當(dāng)消息更新時(shí),具體觀察者得到通知后,具體主題不會將變化后的數(shù)據(jù)交給具體觀察者,而是調(diào)用具體主題提供的方法得到數(shù)據(jù),即由觀察者根據(jù)需要“拉取”數(shù)據(jù)。

2 觀察者模式中的“拉數(shù)據(jù)”方式在電子商務(wù)物流系統(tǒng)設(shè)計(jì)中的應(yīng)用

2.1 問題場景

消費(fèi)者在電子商務(wù)網(wǎng)站購買物品后,電子商務(wù)網(wǎng)站作為網(wǎng)購第三方平臺,會發(fā)布物流公司反饋的貨物當(dāng)前到達(dá)地點(diǎn)、所選取的快遞公司等相關(guān)物流信息。例如,現(xiàn)有兩位消費(fèi)者對物流信息較感興趣,一位消費(fèi)者只關(guān)心當(dāng)前時(shí)間及貨物當(dāng)前送達(dá)地點(diǎn),并不關(guān)心商家選取的物流公司信息,而另一位消費(fèi)者只關(guān)心商家選取的物流公司信息,并不關(guān)心貨物當(dāng)前送達(dá)地點(diǎn)。如果采用基于觀察者模式的“推”數(shù)據(jù)方式進(jìn)行系統(tǒng)設(shè)計(jì),則當(dāng)消息更新時(shí),不管消費(fèi)者對這些信息需要與否,電子商務(wù)網(wǎng)站都會將物流公司反饋的物流信息通過參數(shù)的形式“推送”給消費(fèi)者,而采用“拉”數(shù)據(jù)方式設(shè)計(jì)系統(tǒng),則當(dāng)消息更新時(shí),電子商務(wù)網(wǎng)站不會將變化后的數(shù)據(jù)推給消費(fèi)者,而是由消費(fèi)者根據(jù)需要“拉取”信息。

2.2 基于“拉”模型的系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

對于上述問題,兩位消費(fèi)者為具體觀察者,而相關(guān)的電子商務(wù)網(wǎng)站即為他們所依賴的一個(gè)具體主題。按照觀察者模式的結(jié)構(gòu),系統(tǒng)類圖如圖2所示。

[<>

Subject][<>

Observer][LogisticSubject\網(wǎng)購平臺(物流信息發(fā)布方)\][CustomerOne\消費(fèi)者1\][CustomerTwo\消費(fèi)者2\] [通知][通知]

圖2 物流信息發(fā)布方與消費(fèi)者

⑴ 抽象主題

定義一個(gè)Subject接口,規(guī)定具體主題需要實(shí)現(xiàn)的三個(gè)抽象方法,用來添加、刪除觀察者及通知觀察者更新數(shù)據(jù)。主題接口Subject代碼如下:

public interface Subject {

public void ResisterObserver(Observer o);

public void UnResisterObserver(Observer o);

public void notifyObserver(); }

⑵ 抽象觀察者

設(shè)計(jì)觀察者Observer接口,規(guī)定了具體觀察者用來更新數(shù)據(jù)的方法,對于本問題,規(guī)定具體主題不將變化后的數(shù)據(jù)通過update()方法交給具體觀察者,而是提供了獲取這些數(shù)據(jù)的方法,由觀察者根據(jù)需要“拉取”信息。觀察者接口Observer代碼如下:

public interface Observer { public void update(); }

⑶ 具體主題LogisticSubject

對于本問題,物流公司為具體主題,由于電子商務(wù)物流信息發(fā)布平臺不清楚它的觀察者是否對全部物流信息都感興趣,因此允許觀察者采用拉數(shù)據(jù)的方式獲得信息,即在應(yīng)用notifyObserver()方法通知觀察者時(shí),僅僅通知觀察者執(zhí)行更新操作而不直接提供數(shù)據(jù)。具體主題類LogisticSubject的部分代碼如下:

public class LogisticSubject implements Subject {

public LogisticSubject() {

personlist=new ArrayList(); //存放觀察者引用的數(shù)組

}

public void notifyObserver() {

for(Observer o:personlist) {

o.update(); //通知觀察者執(zhí)行更新操作,但不提供數(shù)據(jù) } } }

⑷ 具體觀察者

在本問題中,消費(fèi)者為具體觀察者,創(chuàng)建的具體觀察者類分別為:CustomerOne和CustomerTwo。CustomOne創(chuàng)建的觀察者只關(guān)心貨物當(dāng)前到達(dá)的地點(diǎn),CustomerTwo只關(guān)心商家選取的物流配送公司的相關(guān)信息。CustomerOne和CustomerTwo類部分代碼如下:

CustomerOne.java

public class CustomerOne implements Observer {

Subject subject;

public CustomerOne(Subject subject,String personnanme) {

subject.ResisterObserver(this); //使當(dāng)前實(shí)例成為具體主題的觀察者 }

public void update() { if(subject instanceof LogisticSubject) {

String msg1=((LogisticSubject)subject).getGoodsmsg1(); } } }

CustomeraTwo.java

public class CustomerTwo implements Observer {

//部分代碼同CustomOne

String msg2=((LogisticSubject)subject).getGoodsmsg2(); }

2.3 測試結(jié)果分析

測試類Application.java使用了觀察者模式中涉及的類,通過具體主題subject給出新信息,具體觀察者zhangsan和lisi根據(jù)需要調(diào)用具體主題提供的方法獲取自己感興趣的物流信息。Application.java演示了兩個(gè)顧客根據(jù)需要獲取自己所需要的物流信息的過程,具體代碼及如下:

3 結(jié)束語

通過對觀察者模式在電子商務(wù)系統(tǒng)中的應(yīng)用研究可以發(fā)現(xiàn),基于Java的觀察者模式設(shè)計(jì)方式,在具體主題和具體觀察者之間建立起一個(gè)松耦合關(guān)系,在模塊之間劃定了清晰的界限,滿足程序設(shè)計(jì)的“開閉原則”,提高了應(yīng)用程序的可維護(hù)性和重用性。觀察者模式——“拉”模型不僅支持廣播通信,而且可以由觀察者根據(jù)需要“拉取”數(shù)據(jù),體現(xiàn)了系統(tǒng)設(shè)計(jì)的個(gè)性化和人性化。將基于觀察者模式的“拉”數(shù)據(jù)模型應(yīng)用到電子商務(wù)網(wǎng)站物流查詢系統(tǒng)中,不僅使系統(tǒng)變得易于維護(hù)和擴(kuò)展,而且便于客戶進(jìn)行貨物跟蹤、實(shí)施個(gè)性化查詢,有助于提升服務(wù)質(zhì)量,吸引和留住客戶,具有較強(qiáng)的理論和實(shí)踐意義,對電子商務(wù)行業(yè)的發(fā)展具有深遠(yuǎn)影響。隨著電子商務(wù)的不斷普及和應(yīng)用深化,相信觀察者模式將在電子商務(wù)系統(tǒng)設(shè)計(jì)中發(fā)揮越來越重要的作用。

參考文獻(xiàn):

[1] 王曉平.電子商務(wù)物流[M].上海交通大學(xué)出版社,2010.

[2] 馮新?lián)P,沈建京,姚松林.基于ASP.NET的觀察者模式應(yīng)用研究[J].

Computer Applications and Sottware,2008.11:172

[3] Erich Gamma,Richard Helm,Ralph Johnson著,李英軍,馬曉星,蔡

敏等譯.設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)[M].機(jī)械工業(yè)出版社,2005.

[4] 《JAVA與模式》第18天—觀察者模式[OB/OL].http://www.

ymsky.net/views/135308.shtml.2014.4.23.

[5] 耿祥義,張躍平.Java設(shè)計(jì)模式[M].清華大學(xué)出版社,2009.

[6] 歐陽宏基,楊衛(wèi)忠,趙薔.觀察者模式在Java事件處理中的應(yīng)用研究[J].

微處理機(jī),2013.4:77

主站蜘蛛池模板: 国产精品视频导航| 51国产偷自视频区视频手机观看| 日韩高清欧美| 中国国产一级毛片| 免费国产福利| 国产伦精品一区二区三区视频优播| 一本大道无码日韩精品影视| 狠狠五月天中文字幕| 亚洲日韩国产精品综合在线观看| 欧美在线精品怡红院| 日本一区二区三区精品AⅤ| 一本大道东京热无码av| 免费人成又黄又爽的视频网站| 欧美视频二区| 国产区精品高清在线观看| 国产成人一区二区| 亚洲一区网站| 久久国产亚洲欧美日韩精品| 2018日日摸夜夜添狠狠躁| 国产亚洲精品97AA片在线播放| 97狠狠操| 国产一区二区三区夜色| 青青久久91| 国产高颜值露脸在线观看| 欧美精品导航| 日韩a级毛片| 欧美激情第一欧美在线| 国产一区二区精品福利| 亚洲国产亚综合在线区| 97国产在线视频| 激情综合网址| 国产欧美日韩在线在线不卡视频| 一级做a爰片久久毛片毛片| 国产欧美日韩另类| 在线观看免费人成视频色快速| 无码专区在线观看| 国内精自线i品一区202| 91精品国产麻豆国产自产在线| 久久青草视频| 午夜人性色福利无码视频在线观看| 看看一级毛片| 亚洲天堂免费观看| 99热这里都是国产精品| 久久精品丝袜| 国产精品嫩草影院av| 国产黄色视频综合| 五月婷婷导航| 无码 在线 在线| 91在线中文| 真实国产精品vr专区| 久久免费观看视频| 秋霞午夜国产精品成人片| 在线一级毛片| 91视频首页| 91探花国产综合在线精品| 老司机午夜精品网站在线观看 | 亚洲中文字幕在线一区播放| 国产剧情国内精品原创| 国产精品亚洲专区一区| 天天综合天天综合| 久久青草精品一区二区三区| 国产日韩欧美在线播放| 精品三级网站| 国产精品福利导航| 久久久久久久97| 国产a网站| a亚洲天堂| 福利一区三区| 国产91无码福利在线| 亚洲第一成年人网站| 国产区成人精品视频| 激情六月丁香婷婷| 毛片大全免费观看| 亚洲性视频网站| 无码国内精品人妻少妇蜜桃视频| 久久综合亚洲色一区二区三区| 国产二级毛片| 午夜毛片免费观看视频 | 国内精自视频品线一二区| 欧美国产综合视频| 国产91在线免费视频| 国产精品尤物铁牛tv|