Java設(shè)計(jì)模式之組合模式_第1頁
Java設(shè)計(jì)模式之組合模式_第2頁
Java設(shè)計(jì)模式之組合模式_第3頁
Java設(shè)計(jì)模式之組合模式_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第Java設(shè)計(jì)模式之組合模式}

使用組合模式的兩種實(shí)現(xiàn)方法,這樣就對老王的書架改造工程就完成了,對憑空捏造出來的需求有些讀者看完想必還是云里霧里。我們結(jié)合JDK的源碼和一些開發(fā)常用框架,再次深入源碼對組合模式的使用。

通過查詢資料可知,組合模式在Jdk中的應(yīng)用主要是集合類HashMap和Mybtis中的SqlNode。

我們分別看其實(shí)現(xiàn)。

1、jdk中HashMap的運(yùn)用

在HashMap中有一個(gè)父類AbstractMap和一個(gè)子類Node。如下圖

我們看下源代碼:

publicclassHashMapK,VextendsAbstractMapK,V

implementsMapK,V,Cloneable,Serializable{

publicvoidputAll(MapextendsK,extendsVm){

putMapEntries(m,true);

finalvoidputMapEntries(MapextendsK,extendsVm,booleanevict){

ints=m.size();

if(s0){

if(table==null){//pre-size

floatft=((float)s/loadFactor)+1.0F;

intt=((ft(float)MAXIMUM_CAPACITY)

(int)ft:MAXIMUM_CAPACITY);

if(tthreshold)

threshold=tableSizeFor(t);

elseif(sthreshold)

resize();

for(Map.EntryextendsK,extendsVe:m.entrySet()){

Kkey=e.getKey();

Vvalue=e.getValue();

putVal(hash(key),key,value,false,evict);

}

putAll()方法傳入的是Map對象,Map就是一個(gè)抽象構(gòu)件(同時(shí)這個(gè)構(gòu)件中只支持健值對的存儲格式),而HashMap是一個(gè)中間構(gòu)件,HashMap中的Node節(jié)點(diǎn)就是葉子節(jié)點(diǎn)。

Node是HashMap中的一個(gè)內(nèi)部類,HashMap的存儲節(jié)點(diǎn)指的正是Node,讀者可以重點(diǎn)看這個(gè)類的實(shí)現(xiàn)。

在這個(gè)實(shí)例中,HashMap就是樹枝節(jié)點(diǎn),Node就是葉節(jié)點(diǎn),Map就是根節(jié)點(diǎn)。

2、Mybtis中的SqlNode

SqlNode是一個(gè)接口,主要功能就是構(gòu)造SQL語句。

publicinterfaceSqlNode{

booleanapply(DynamicContextcontext);

}

SqlNode有一大堆的實(shí)現(xiàn)類,我們看其中的MixedSqlNode。

publicclassMixedSqlNodeimplementsSqlNode{

privatefinalListSqlNodecontents;

publicMixedSqlNode(ListSqlNodecontents){

this.contents=contents;

@Override

publicbooleanapply(DynamicContextcontext){

contents.forEach(node-node.apply(context));

returntrue;

}

SqlNode就充當(dāng)組合模式中的Root,而他的眾多子類作用就在于拼接各種類型的SQL,在組合模式的角色中相當(dāng)于樹枝節(jié)點(diǎn)。其中在TrimSqlNode中有一個(gè)子類WhereSqlNode就充當(dāng)組合模式中的樹葉節(jié)點(diǎn)。

這兩個(gè)都屬于組合模式中的典型例子,讀者體會(huì)下使用這種模式的好處,和如果不使用組合模式應(yīng)該怎樣實(shí)現(xiàn)。

通過這兩個(gè)例子我們應(yīng)該可以看到,設(shè)計(jì)模式的使用中并不是完全遵循各自的角色,更多的是設(shè)計(jì)模式中的一些變種,讀者不深入源碼并不能了解到該模式的實(shí)現(xiàn)細(xì)節(jié)。讀者需要做的就是盡可能的熟悉設(shè)計(jì)模式,在自己開發(fā)過程中可以擇優(yōu)錄取。

到這里組合模式也就介紹完了,這種模式的優(yōu)缺點(diǎn)都非常的明顯,優(yōu)點(diǎn)就在于清楚的定義分層次的結(jié)構(gòu),在調(diào)用時(shí)忽略他們之間的差異,方便對整個(gè)層次進(jìn)行控制,但是組合模式會(huì)違反依賴倒置原則。

理解是一回事,在實(shí)際應(yīng)用中能正確的使用它就是另外一回事了。

讀者要對每種設(shè)計(jì)模式都能做到心中有數(shù),當(dāng)我們在實(shí)際編程中,在潛意識里有各個(gè)設(shè)計(jì)模式的大體輪廓,參考代入進(jìn)各種設(shè)計(jì)模式中,對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論