版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
行為型模式,是從類(lèi)或?qū)ο笾g交互、職責(zé)劃分等角度總結(jié)的模式。比較常見(jiàn)的行為型模式有策略模式(Sraey)、解釋器模式(nerpreer)、命令模式(Command)、觀察者模式(Obserer)、迭代器模式(I tor)、模板方法模式(TemeMehod)、者模式(Visitor)。。場(chǎng)景是怎樣的。這里舉個(gè)Java基礎(chǔ)類(lèi)庫(kù)中的例子供你參考。首先,專(zhuān)欄第11講剛介紹過(guò)IO框架,我們知道InputStream是一個(gè)抽象類(lèi),標(biāo)準(zhǔn)類(lèi)庫(kù)中提供了FileInputStream、ByteArrayInputStream等各種不同的子類(lèi),分別從不同角度對(duì)InputStream進(jìn)行了功能擴(kuò)展,這是典型的裝飾器模式應(yīng)用案例。識(shí)別裝飾器模式,可以通過(guò)識(shí)別類(lèi)設(shè)計(jì)特征來(lái)進(jìn)行判斷,也就是其類(lèi)構(gòu)造函數(shù)以相同的抽象因?yàn)檠b飾器模式本質(zhì)上是包裝同類(lèi)型實(shí)例,我們對(duì)目標(biāo)對(duì)象的調(diào)用,往往會(huì)通過(guò)包裝類(lèi)覆蓋過(guò)的方法,迂回調(diào)用被包裝的實(shí)例,這就可以很自然地實(shí)現(xiàn)增加額外邏輯的目的,也就是所謂的“裝飾”。例如,BufferedInputStreampublicBufferedInputStream(InputStream我在下面的類(lèi)圖里,簡(jiǎn)單總結(jié)了InputStream 對(duì)不同的API設(shè)計(jì)實(shí)踐。比如,JDK版本中HTTP/2API,下面這個(gè)創(chuàng)建HttpRequest的過(guò)程,就是典型的構(gòu)建器模式(Builder),通常會(huì)被實(shí)現(xiàn)成fluent風(fēng)格的HttpRequestrequest=HttpRequest.newBuilder(new.header(headerAlice,.headers(headerBob,headerCarl,headerBob,上面的分析也進(jìn)一步反映了創(chuàng)建型模式的初衷,即,將對(duì)象創(chuàng)建過(guò)程單獨(dú)抽象出來(lái),從結(jié)構(gòu)上把對(duì)象使用邏輯和創(chuàng)建邏輯相互獨(dú)立,隱藏對(duì)象實(shí)例的細(xì)節(jié),進(jìn)而為使用者實(shí)現(xiàn)了更加規(guī)范、統(tǒng)一的邏輯。publicclassSingletonprivatestaticSingletoninstance=newpublicstaticSingletongetInstance()return 是不是總感覺(jué)缺了點(diǎn)什么?原來(lái),Java會(huì)自動(dòng)為沒(méi)有明確構(gòu)造函數(shù)的類(lèi),定義一個(gè)public完全可以直接“newSingleton()”,那我們應(yīng)該怎么處理呢?不錯(cuò),可以為單例定義一個(gè)private的構(gòu)造函數(shù)(也有建議為枚舉,這是有爭(zhēng)議的,我個(gè)人不建議選擇相對(duì)復(fù)雜的枚舉,畢竟日常開(kāi)發(fā)不是學(xué)術(shù)研究)。這樣還有什么改進(jìn)的余地專(zhuān)欄第10講介紹ConcurrentHashMappublicclassSingletonprivatestaticSingletonprivateSingleton()}publicstaticSingletongetInstance()if(instance==null)instance=new}return} volatilegetInstance完全的對(duì)象。在同步之前進(jìn)行null檢查,以盡量避免進(jìn)入相對(duì)昂貴的同步塊。直接在classpublicclassSingletonprivatestaticvolatileSingletonsingleton=privateSingleton()}5publicstaticSingletongetSingleton()if(singleton==null){//synchronized(Singleton.class){//同步.classif(singleton==null)singleton=new }return}}volatileSingleton量時(shí),需要保證初始化過(guò)程完成后,才能被get到。在現(xiàn)代Java中,內(nèi)存排序模型(JMM)已經(jīng)非常完善,通過(guò)volatile的write或者read,能保證所謂的happen-before,也就是避免常被提到的指令重排。換句話說(shuō),構(gòu)造對(duì)象的store指令能夠被保證一定在volatileread之前。中隱含的初始化鎖(有的話你可以參考jls-12.4.2中對(duì)LC的說(shuō)明),這種和前面的雙publicclassSingltonprvatepubicstaticSingletonreturn}6privatestaticclassHolderprivatestaticSingletonsingleton=new}10上面是比較學(xué)究的,其實(shí)實(shí)踐中未必需要如此復(fù)雜,如果我們看Java類(lèi)庫(kù)自己的靜態(tài)實(shí)例被為final,這是被通常實(shí)踐忽略的,一定程度保證了實(shí)例不被篡改(專(zhuān)欄第6講介紹過(guò),反射之類(lèi)可以繞過(guò)私有限制),也有有限的保證執(zhí)行順序的語(yǔ)義。privatestaticfinalRuntimecurrentRuntime=newprivatestaticVersion//publicstaticRuntimegetRuntime()return6/**Don'tletanyoneelseinstantiatethisclassprivateRuntime()SpringAPIBeanSpringscope我在專(zhuān)欄第6講介紹的AOP領(lǐng)域則是使用了模式、裝飾器模式、適配器模式等。類(lèi)似JdbcTemte等則是應(yīng)用了模板模式今天,我與你回顧了設(shè)計(jì)模式的分類(lèi)和主要類(lèi)型,并從Java類(lèi)庫(kù)、開(kāi)源框架等不同角度分析了其采用的模式,并結(jié)合單例的不同實(shí)現(xiàn),分析了如何實(shí)現(xiàn)符合線程安全等需求的單例,希望可以對(duì)你的工程實(shí)踐有所幫助。另外,最后補(bǔ)充的是,設(shè)計(jì)模式也不是銀彈,要避免或者過(guò)度設(shè)計(jì)。你的朋友是不是也在準(zhǔn)備面試呢?你可以“請(qǐng)朋友讀”,把今天的題目給好友,或許你 歸科技所有 不得售賣(mài)。頁(yè)面已增加防盜追蹤,將依法其上一 第13講|談?wù)劷涌诤统橄箢?lèi)有什么區(qū)別下一 第15講|synchronized和ReentrantLock有什么區(qū)別呢 28南北少 云 田維 7公司項(xiàng)目是一個(gè)基于sboot、mybatis開(kāi)發(fā)的web后端管理項(xiàng)目?,F(xiàn)在的問(wèn)題是不同 Facade(外觀模式接口模式。處理組件中外部客戶程序和組件中各種復(fù)雜的子系統(tǒng)高耦合情況,定義一…李志 5Spring內(nèi)部的asm模塊用到了者模 外觀模式(FacadePattern)隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)客戶端可以…潤(rùn) 3星 合,簡(jiǎn)化了系統(tǒng)復(fù)雜度。缺點(diǎn)是了開(kāi)閉原則。適用于為一系列復(fù)雜的子系統(tǒng)提供一個(gè) 2有一點(diǎn)理解不太一致,單例模式doublecheck中synchronized就已經(jīng)可以提供可見(jiàn)性,君莫 So 1 1 1facade模式主要系統(tǒng)內(nèi)部
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025云南玉溪川洋產(chǎn)業(yè)發(fā)展有限公司招聘筆試歷年備考題庫(kù)附帶答案詳解
- 2025云南昆明市安居集團(tuán)有限公司招聘6人筆試參考題庫(kù)附帶答案詳解
- 2025云南華寧縣新華源水電有限公司招聘2人筆試歷年備考題庫(kù)附帶答案詳解2套試卷
- 2025中煤集團(tuán)新疆能源有限公司面向社會(huì)公開(kāi)招聘及校園招聘163人筆試歷年典型考點(diǎn)題庫(kù)附帶答案詳解
- 2025中新建物流集團(tuán)有限責(zé)任公司人員招聘(7人)筆試參考題庫(kù)附帶答案詳解
- 2025中國(guó)雄安集團(tuán)城市發(fā)展投資有限公司招聘60名筆試歷年??键c(diǎn)試題專(zhuān)練附帶答案詳解
- 2025中國(guó)西電集團(tuán)有限公司招聘13人筆試歷年??键c(diǎn)試題專(zhuān)練附帶答案詳解
- 2025中國(guó)電建西北勘測(cè)設(shè)計(jì)研究院有限公司合同管理崗招聘1人(陜西)筆試歷年典型考點(diǎn)題庫(kù)附帶答案詳解2套試卷
- 2025中國(guó)平煤神馬集團(tuán)數(shù)據(jù)科技中心招聘50人筆試參考題庫(kù)附帶答案詳解
- 2025中國(guó)兵器裝備集團(tuán)有限公司春季招聘筆試歷年難易錯(cuò)考點(diǎn)試卷帶答案解析2套試卷
- 標(biāo)準(zhǔn)化咨詢服務(wù)方案
- 四新安全生產(chǎn)培訓(xùn)課件
- 林業(yè)結(jié)構(gòu)化面試題庫(kù)及答案
- 2025年青島市中考數(shù)學(xué)試卷(含答案解析)
- DB37∕T 5237-2022 《超低能耗公共建筑技術(shù)標(biāo)準(zhǔn)》
- 長(zhǎng)護(hù)險(xiǎn)護(hù)理培訓(xùn)
- 手術(shù)后疼痛評(píng)估與護(hù)理團(tuán)體標(biāo)準(zhǔn)
- 光伏公司銷(xiāo)售日常管理制度
- 麻醉科PDCA持續(xù)改進(jìn)麻醉術(shù)后鎮(zhèn)痛
- 6.3+基層群眾自治制度+課件高中政治統(tǒng)編版必修三政治與法治
- 班級(jí)思想教育工作
評(píng)論
0/150
提交評(píng)論