方雅婧,饒浩,于衛(wèi)紅,陳燕
裝飾者模式在定制化電子商務(wù)中的應(yīng)用
方雅婧,饒浩,于衛(wèi)紅,陳燕
隨著電子商務(wù)的發(fā)展,消費者開始不滿足于單一不變的商品,定制化的電子商務(wù)逐漸興起。分析了現(xiàn)有電子商務(wù)系統(tǒng)中定制化實現(xiàn)的不足,提出了將裝飾者設(shè)計模式應(yīng)用到電子商務(wù)定制化系統(tǒng)設(shè)計中的思路和方法。通過實例,比較了完全繼承機制與裝飾者模式的優(yōu)劣,說明了裝飾者模式在軟件可擴展性和可維護性中的作用。
裝飾者模式;定制化;電子商務(wù);系統(tǒng)設(shè)計
20世紀90年代,基于萬維網(wǎng)的互聯(lián)網(wǎng)技術(shù)突飛猛進,進而使得商務(wù)活動電子化的想法逐步成熟,而后互聯(lián)網(wǎng)開始真正應(yīng)用于商業(yè)交易,電子商務(wù)也日益蓬勃發(fā)展起來[1]。
隨著競爭的激烈、銷售的微利、消費的疲態(tài),傳統(tǒng)電商正面臨著轉(zhuǎn)型的壓力。現(xiàn)在的消費者,在對便捷快速的網(wǎng)購習(xí)以為常之后,開始追求能凸顯自我的個性化。互聯(lián)網(wǎng)本身的互動性使人們可以按照需要進行選擇而且具有數(shù)量龐大的潛在用戶基礎(chǔ)。于是,定制化電子商務(wù)的優(yōu)點逐漸體現(xiàn)出來。定制化是C2B電商的一種體現(xiàn),實際上是對傳統(tǒng)B2C購物體驗的進一步互動深挖。傳統(tǒng)的B2C模式中所有環(huán)節(jié)都由廠商驅(qū)動,而C2B是由消費者驅(qū)動,以消費者需求為起點,力求發(fā)掘消費者的主動性與積極性的一種商業(yè)模式。毋庸置疑,定制化挖掘了互聯(lián)網(wǎng)的真正潛力,是未來電子商務(wù)的發(fā)展方向[2][3]。
如何實現(xiàn)定制化、個性化是一個難題。個性化意味著消費者的選擇不再是唯一的商品,而是不斷變化的商品。相應(yīng)的軟件系統(tǒng)要面臨著不斷增加的變化,這就要求我們設(shè)計的系統(tǒng)擁有良好的可靠性,可復(fù)用性,可拓展性和可維護性。如果不進行設(shè)計優(yōu)化,整個系統(tǒng)務(wù)必會缺少應(yīng)對變化的能力,而設(shè)計模式可以使軟件更易修改和維護。根據(jù)定制化的特點(動態(tài)地添加產(chǎn)品特性,而且可以隨時撤銷),裝飾者模式可以更好幫助我們實現(xiàn)產(chǎn)品定制。
設(shè)計模式是針對某一類問題的最佳解決方案,而且已經(jīng)被成功應(yīng)用于許多系統(tǒng)的設(shè)計中,它解決了在某種特定情景中重復(fù)發(fā)生的某個問題[4]。20 世紀90 年代初,Gamma、Helm、Johnson 和Vlissides 等人將建筑領(lǐng)域的模式思想引入到軟件開發(fā)中,提出了注明的GOF23種設(shè)計模式,裝飾者模式即屬于其中之一[5]。
裝飾者模式可以動態(tài)地給一個對象增加職責(zé)。就擴展對象功能來說,裝飾者模式比生成子類更為靈活。
裝飾者模式適用于以下3種情況:
(1)在不影響其他對象的情況下,以動態(tài)、透明的方式給單個對象添加職責(zé)。
(2)處理那些可以撤銷的職責(zé)。
(3)當(dāng)不能采用生成子類的方法進行擴充時。一種情況是,可能有大量獨立的擴展,為支持每一種組合將產(chǎn)生大量的子類,使得子類數(shù)目呈爆炸性增長。另一種情況可能是因為類定義被隱藏,或類定義不能用于生成子類[6]。
裝飾者模式的類圖,如圖1所示:
圖1 裝飾者模式的類圖
·Component:定義一個對象接口,可以給這些對象動態(tài)地添加職責(zé)。
·ConcreteComponent:定義一個對象,可以給這個對象添加一些職責(zé)。
·Decorator:維持一個指向Component對象的指針,并定義一個與Component接口一致的接口。
·ConcreteDecorator:向組件添加職責(zé)。
Decorator模式的工作原理:
可以創(chuàng)建始于Decorator對象(負責(zé)新功能的對象)終于原對象的一個對象“鏈”。
每條鏈都始于一個Component對象。每個Decorator對象后面都跟著另一個Decorator對象或原ConcreteComponent對象。對象鏈總是終于一個ConcreteComponent對象。例如在圖1中,ConcreteDecoratorB對象執(zhí)行其operation方法,然后調(diào)用Decorator類的Operation方法。這又將調(diào)用ConcreteDecoratorB對象之后的Component對象的Operation方法。[5]
2.1 問題的提出
現(xiàn)在流行的定制化方式可分為兩種。一種是提供簡單的個性化定制,比如iPad mini訂購時背面的刻字,比如購買手機時外殼的顏色和樣式等,另一種則是像 Nike、Sony這種提供對某個系列的產(chǎn)品的各個部分的定制。這兩種定制化方式都存在著明顯的不足,第一種方式可以給用戶帶來一定的個性化元素,但僅僅是外觀上的部分改變,而且變化非常有限。第二種方式雖然可以提供幾乎完全的產(chǎn)品定制,但定制方式幾乎一成不變,不夠靈活。例如
Nike官網(wǎng)提供的Nikeid專屬定制服務(wù),用戶可以選擇鞋面、鞋底的樣式及顏色,但可以進行定制的部分是由廠商決定的,如果用戶的需求發(fā)生了改變,例如需要增加對鞋面標(biāo)志的定制,或者增加鞋面可選的樣式,滿足需求的代價就有可能是修改整個系統(tǒng)。
所以說現(xiàn)有的定制化模式缺少可拓展性。
用戶的需求可能是經(jīng)常變化的,市場需要的是一種更為靈活多變的定制化解決方案,定制的內(nèi)容可以隨用戶需求的變化增加或減少,這就需要應(yīng)用到裝飾者模式,通過動態(tài)的增加或減少某個對象的職責(zé)實現(xiàn)靈活的產(chǎn)品定制化服務(wù)。
2.2 應(yīng)用示例
假設(shè)某筆記本商需要向顧客提供定制服務(wù),需要一套自動化的定制系統(tǒng)。筆記本有5個部分可以進行定制:Cpu、內(nèi)存、外殼、硬盤、顯卡。
2.2.1 用繼承的方式來實現(xiàn):
提出分析系統(tǒng)的需求后,可以設(shè)計出如下的類圖,如圖2所示:
圖2 應(yīng)用繼承的方式設(shè)計的定制系統(tǒng)的類圖
在圖2中,NoteBook類是所有筆記本的基類,所有種類的筆記本都是該類的子類。Part類是表示筆記本配件的抽象類。Cpu類,Ram類,Case類,Drive類,Graphics類都是其子類。
在基類里包含5個變量,組合了Cpu,Ram,Case,Drive,Graphics5個類的對象,每個變量有相應(yīng)的Setter()方法可以設(shè)置其值。
雖然這看起來是個不錯的設(shè)計方式,但是再從應(yīng)對變化的角度來推敲這個設(shè)計,對一個筆記本定制系統(tǒng)來說,最頻繁的變化就是配件可選配置的變化。例如,原先只允許定制筆記本外殼的整體顏色,現(xiàn)在需要對筆記本A面,B面,以及側(cè)邊的樣式都進行定制,這樣就要修改Case類的代碼,為其添加屬性和方法;或者需要增加對筆記本鍵盤的定制,我們就只能修改基類NoteBook類的代碼,增加一個Keyboard屬性。這種從代碼的層次來應(yīng)對變化的方式無疑是很糟糕的。完全不符合“對擴展開發(fā),對修改關(guān)閉”設(shè)計原則。
在分析了用繼承的缺點之后,可以看出現(xiàn)在需要一種支持在可定制配件總類發(fā)生變化或配件可選配置發(fā)生變化而不需要修改已有代碼的設(shè)計。于是,我們需要用到裝飾者模式。
2.2.2 應(yīng)用裝飾者模式
可以把定制的過程想象成一個筆記本組裝的過程,每用一個裝飾者來裝飾筆記本對象就相當(dāng)于為筆記本添加一個配件。簡單的類圖如圖3所示:
圖3 應(yīng)用裝飾者模式設(shè)計的定制系統(tǒng)的類圖
Notebook類是一個筆記本抽象類,代表裝飾者模式中的抽象組件(Component),Note1、Note2、是筆記本的兩個系列,每個系列都是Notebook類的一個子類(實際可能有很多個系列),代表具體組件(ConcreteComponent)。Decorator類也是Notebook類的一個子類,是一個抽象類,代表抽象裝飾者(Decorator)。Cpu、Ram、Case、Drive、Graphics,是Decorator類的非抽象子類,代表具體裝飾(ConcreteDecorator),即裝飾者。
假設(shè)每個部分都有兩個可選配置:
Cpu:Intel 酷睿i5 4200U、Intel 酷睿i7 4500U。
內(nèi)存:4GB DDR3 1600 MHz、8GB DDR3 1600 MHz。
外殼:銀白色、紅黑色。
硬盤:500GB 5400轉(zhuǎn)、1TB 7200轉(zhuǎn)。
顯卡:NVIDIA GeForce GT 710M、NVIDIA GeForce GT 720M 。因此,每個部分不只用一個裝飾者,每種配置應(yīng)對應(yīng)一個裝飾者。更詳細的類圖如圖4所示:
圖4 應(yīng)用裝飾者模式設(shè)計的定制系統(tǒng)的改進后的類圖
在NoteBook類用兩個抽象方法簡單的表示筆記本的定制過程:
public abstract class NoteBook
{
public abstract double price();
public abstract void addComponent();//向筆記本添加配件的方法
}
CpuDec1類與Ramdec1類的部分代碼(其他裝飾者的代碼類似):
public class CpuDec1 extends Decorator{
private double price=1000;//cpu價格
public CpuDec1(NoteBook notebook) {
super(notebook);
}
public double price() {
return price+notebook.price();
}
public void addCpu1() {
System.out.print("裝上cpu1,");
KKKKK.; //為筆記本加上CPU的方法
}
public void addComponent() {
addCpu(); //為筆記本加上CPU的方法
notebook.addComponent();
}
}
public class RamDec1 extends Decorator{
private double price=400;//內(nèi)存價格
public RamDec1(NoteBook notebook) {
super(notebook);
}
public double price() {
return price+notebook.price();
}
public void addRam1() {
System.out.print("裝上內(nèi)存1,");
KKKKK.;//為筆記本加上內(nèi)存的方法
}
public void addComponent() {
addRam1();//為筆記本加上內(nèi)存的方法
notebook.addComponent();
}
}
Note1類的部分代碼
private double price=1500; //表示未進行組裝的筆記本的基本價格
public double price() {
return price;
}
public void addComponent() {
KKKK;.//表示組裝完成
}
調(diào)用如下代碼:
NoteBook note;
Note= new CpuDec1(new CaseDec1(new Note1()));//此時Note是只裝了外殼和Cpu的筆記本
note=new DriveDec1(new GraphicsDec1(new Ram-Dec1(new CpuDec1(new CaseDec1(new Note1())))));//這時候的note是擁有所有配件的筆記本
note.addComponent();//表示開始組裝筆記本
System.out.println(note.price());//定制后的筆記本的價格
運行的效果大致如圖5所示:
圖5 程序模擬運行效果圖
這樣,如果需要增加外殼的定制樣式,我們不需要修改原Case類的代碼,只需增加一個裝飾者類。
通過以上兩種方式的對比,可以發(fā)現(xiàn),應(yīng)用裝飾者模式可以使整個系統(tǒng)更加靈活,更利于擴展;定制化的靈活性越高,越能更好地滿足用戶的需求。但是,如果每個筆記本部件的可選配置有很多種,或者說想要實現(xiàn)每個部件的精細化定制,就有可能需要用到很多個裝飾者類,而且裝飾鏈過長會影響程序的效率。過度使用裝飾者會讓程序變得過于復(fù)雜,一味追求靈活性而使程序變得復(fù)雜也是不可取的,并不是每個變化都要用裝飾者模式來實現(xiàn),模式的使用要適當(dāng)。
電子商務(wù)的發(fā)展正在邁向定制化,現(xiàn)有的系統(tǒng)不足以滿足用戶需求。開發(fā)者面臨的用戶群越來越龐大,要處理的變化越來越多,系統(tǒng)的功能越來越復(fù)雜。通過應(yīng)用設(shè)計模式可以保證軟件的良好結(jié)構(gòu),提高代碼的復(fù)用性,同時能使系統(tǒng)更易于維護與修改。
[1] 白東蕊,岳云康,張瑩.電子商務(wù)概論[M].北京:人民郵電出版社,2013.
[2] 為什么定制化才是電子商務(wù)的未來,http://soft.chinabyte.com/498/12775498.shtml.
[3] 大規(guī)模定制化B2C成電子商務(wù)新趨勢[J] .IT經(jīng)理世界.2007年第22期 .
[4] 耿祥義,張躍平.java設(shè)計模式[M].北京:清華大學(xué)出版社,2013.
[5] 沙洛維(AlanShalloway) .設(shè)計模式解析[M].2版. 北京:人民郵電出版社, 2010.
[6] Erich Gamma.設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)[M]. 北京:機械工業(yè)出版社,2007.
The Application of Decorator Design Pattern into Electronic Commerce Customization Service
Fang Yajing, Rao Hao, Yu Weihong, Chen Yan
(Dalian Maritime University Transportation and Management School, Dalian116026, China)
With the development of electronic commerce, consumers are not satisfied with the product singleness any more. Needs for electronic commerce customization might be on the rise. It analyses problems existing in the implementation of customization of electronic commerce systems and proposes a method of applying the decorator design pattern into electronic commerce customization system designs. Through an example, the inheritance mechanism and the decorator design pattern are compared and the functions of the decorator design pattern for software scalability and maintainability are illustrated.
Decorator Design Pattern; Customization; Electronic Commerce; System Design
TP311
A
1007-757X(2014)10-0020-03
2014.05.27)
遼寧省精品資源共享課項目資助(363187)
方雅婧(1995-),女,大連海事大學(xué)電子商務(wù)專業(yè),管理學(xué)學(xué)士,研究方向:電子商務(wù),大連,116026饒 浩(1993-),男,大連海事大學(xué)電子商務(wù)專業(yè),管理學(xué)學(xué)士,研究方向:電子商務(wù),大連,116026于衛(wèi)紅(1972-),女,大連海事大學(xué)管理科學(xué)與工程學(xué)科,副教授,博士,研究方向:電子商務(wù)、多Agent理論與應(yīng)用、Android物聯(lián)網(wǎng),大連,116026陳 燕(1952-),女,大連海事大學(xué)管理科學(xué)與工程學(xué)科,教授,博士,研究方向:數(shù)據(jù)挖掘、交通大數(shù)據(jù),大連,116026