



下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ××超市積分細(xì)則
- 2025年茶藝師(茶葉產(chǎn)品包裝設(shè)計(jì)案例解析)職業(yè)技能鑒定理論試卷
- 2025年電梯安裝改造維修作業(yè)特種作業(yè)操作證考試試卷(安全知識篇)
- 雨中的邂逅浪漫故事記事15篇
- 難忘的友誼記事作文(12篇)
- 2025年胃癌組織學(xué)基礎(chǔ)試題
- 2025年環(huán)保產(chǎn)業(yè)政策分析:環(huán)保產(chǎn)業(yè)稅收優(yōu)惠政策對行業(yè)的影響
- 僅用于招聘面試的工作證明聲明(6篇)
- 真實(shí)有效性在職職位證明(8篇)
- 康復(fù)醫(yī)療服務(wù)機(jī)構(gòu)連鎖化運(yùn)營模式在2025年的品牌影響力分析
- 營銷策劃 -阿那亞品牌手冊
- 導(dǎo)管相關(guān)感染預(yù)防及控制
- 企業(yè)消防安全培訓(xùn)課件
- 2025年山西焦煤集團(tuán)公司招聘筆試參考題庫含答案解析
- 2025年北京市海淀區(qū)事業(yè)單位公開招聘筆試高頻重點(diǎn)提升(共500題)附帶答案詳解
- 養(yǎng)豬糞污消納協(xié)議書范本
- 開曼群島公司法2024版中文譯本(含2024年修訂主要內(nèi)容)
- 警用數(shù)字集群(PDT)通信系統(tǒng)互聯(lián)技術(shù)規(guī)范
- QC小組活動(dòng)成果-提高地下室綜合管線施工質(zhì)量工程技術(shù)
- 電機(jī)控制與調(diào)速技術(shù) 教案
- 項(xiàng)目6 6.2 植物生產(chǎn)的溫度調(diào)控(2)(課件)-《植物生產(chǎn)與環(huán)境》(高教版第4版)
評論
0/150
提交評論