第14講丨談?wù)勀阒涝O(shè)計(jì)模式_第1頁(yè)
第14講丨談?wù)勀阒涝O(shè)計(jì)模式_第2頁(yè)
第14講丨談?wù)勀阒涝O(shè)計(jì)模式_第3頁(yè)
第14講丨談?wù)勀阒涝O(shè)計(jì)模式_第4頁(yè)
第14講丨談?wù)勀阒涝O(shè)計(jì)模式_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論