創(chuàng)建型設(shè)計(jì)模式
與對象創(chuàng)建有關(guān)包括單例模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式
結(jié)構(gòu)型設(shè)計(jì)模式
結(jié)構(gòu)性設(shè)計(jì)模式是從程序的結(jié)構(gòu)上解決模塊之間的耦合問題,包括適配器模式,代理模式,裝飾模式,外觀模式,橋接模式,組合模式和享元模式
行為型設(shè)計(jì)模式
主要處理類或?qū)ο笕绾谓换ゼ叭绾畏峙渎氊?zé),包括策略模式,模板方法模式,觀察者模式,迭代器模式,責(zé)任鏈模式,命令模式,備忘錄模式,狀態(tài)模式,訪問者模式,中介模式,解析器模式
a. 單一職責(zé)原則:就一個(gè)類來說,應(yīng)該只有一個(gè)引起它變化的原因
一個(gè)類做一件事情,避免職責(zé)過多。比如這種情況是不太好的,在一個(gè) Activity中既有 bean 文件,又有 http 請求,還有 adapter 等等,這就導(dǎo)致我們需要修改任何一個(gè)東西的時(shí)候都會(huì)導(dǎo)致 Activity 的改變,這樣一來就有多個(gè)引起它變化的原因,不符合單一職責(zé)原則
b. 開放封閉原則:類,模塊,函數(shù)應(yīng)該是可以擴(kuò)展的,但是不可以修改
對于擴(kuò)展是開放的,對于修改是封閉的。盡量做到面對需求的改變時(shí),我們的代碼能保持相對穩(wěn)定,通過擴(kuò)展的方式應(yīng)對變化,而不是修改原有代碼實(shí)現(xiàn)
c. 里氏替換原則:所有引用基類的地方,必須可以透明的時(shí)候其子類的對象
里氏替換原則是實(shí)現(xiàn)開放封閉原則的重要方式之一,我們知道,使用基類的地方都可以使用子類去實(shí)現(xiàn),因?yàn)樽宇悡碛谢惖乃蟹椒ǎ栽诔绦蛟O(shè)計(jì)中盡量使用基類類型對對象進(jìn)行定義,在運(yùn)行時(shí)確定子類類型。
d. 依賴倒置原則:高層模塊不應(yīng)該依賴于底層模塊,兩者都應(yīng)該依賴于抽象,抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象
依賴倒置原則針對的是模塊之間的依賴關(guān)系,高層模塊指調(diào)用端,底層模塊指具體的實(shí)現(xiàn)類,抽象指接口或抽象類,細(xì)節(jié)就是實(shí)現(xiàn)類。該原則的具體表現(xiàn)就是模塊間的依賴通過抽象發(fā)生,直線類之間不發(fā)生直接依賴關(guān)系,依賴通過接口或抽象類產(chǎn)生,降低耦合,比如 MVP 模式下,View 層和 P 層通過接口產(chǎn)生依賴關(guān)系
e. 迪米特原則(最少知識原則):一個(gè)軟件實(shí)體應(yīng)該盡可能少的與其他實(shí)體發(fā)生相互作用
迪米特原則要求我們在設(shè)計(jì)系統(tǒng)時(shí),盡量減少對象之間的交互
f. 接口隔離原則:一個(gè)類對另一個(gè)類的依賴應(yīng)該建立在最小的接口上
接口隔離原則的關(guān)鍵是接口以及這個(gè)接口要小,如何小呢,也就是我們要為專門的類創(chuàng)建專門的接口,這個(gè)接口只對它有效,不要試圖讓一個(gè)接口包羅萬象,要建立最小的依賴關(guān)系
單例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些類中。工廠模式(Factory pattern)被用于各種不可變的類如 Boolean,像 Boolean.valueOf,觀察者模式(Observer pattern)被用于 Swing 和很多的事件監(jiān)聽中。裝飾器設(shè)計(jì)模式(Decorator design pattern)被用于多個(gè) Java IO 類中。
設(shè)計(jì)模式是世界上各種各樣程序員用來解決特定設(shè)計(jì)問題的嘗試和測試的方法。設(shè)計(jì)模式是代碼可用性的延伸
單例模式重點(diǎn)在于在整個(gè)系統(tǒng)上共享一些創(chuàng)建時(shí)較耗資源的對象。整個(gè)應(yīng)用中只維護(hù)一個(gè)特定類實(shí)例,它被所有組件共同使用。Java.lang.Runtime 是單例模式的經(jīng)典例子。從 Java5 開始你可以使用枚舉(enum)來實(shí)現(xiàn)線程安全的單例。
觀察者模式是基于對象的狀態(tài)變化和觀察者的通訊,以便他們作出相應(yīng)的操作。簡單的例
子就是一個(gè)天氣系統(tǒng),當(dāng)天氣變化時(shí)必須在展示給公眾的視圖中進(jìn)行反映。這個(gè)視圖對象是一個(gè)主體,而不同的視圖是觀察者。
工廠模式的大好處是增加了創(chuàng)建對象時(shí)的封裝層次。如果你使用工廠來創(chuàng)建對象,之后你可以使用更高級和更高性能的實(shí)現(xiàn)來替換原始的產(chǎn)品實(shí)現(xiàn)或類,這不需要在調(diào)用層做任何修改。
裝飾模式增加強(qiáng)了單個(gè)對象的能力。Java IO 到處都使用了裝飾模式,典型例子就是Buffered 系列類如 BufferedReader 和BufferedWriter,它們增強(qiáng)了 Reader 和 Writer 對象,以實(shí)現(xiàn)提升性能的 Buffer 層次的讀取和寫入。
Java 中不能從靜態(tài)上下文訪問非靜態(tài)數(shù)據(jù)只是因?yàn)榉庆o態(tài)變量是跟具體的對象實(shí)例關(guān)聯(lián)的,而靜態(tài)的卻沒有和任何實(shí)例關(guān)聯(lián)。
比如設(shè)計(jì)金融系統(tǒng)來說,必須知道它們應(yīng)該在任何情況下都能夠正常工作。不管是斷電還是其他情況,ATM 應(yīng)該保持正確的狀態(tài)(事務(wù)) , 想想 加鎖(locking)、事務(wù)(transaction)、錯(cuò)誤條件(error condition)、邊界條件(boundary condition) 等等。盡管
你不能想到具體的設(shè)計(jì),但如果你可以指出非功能性需求,提出一些問題,想到關(guān)于邊界條件,這些都會(huì)是很好的。
如果你看到一個(gè)類的不同實(shí)現(xiàn)有著不同的方式來做同一件事,那么就應(yīng)該用重寫(overriding),而重載(overloading)是用不同的輸入做同一件事。在 Java 中,重載的方法簽名不同,而重寫并不是。
接口和抽象類都遵循”面向接口而不是實(shí)現(xiàn)編碼”設(shè)計(jì)原則,它可以增加代碼的靈活性,可以適應(yīng)不斷變化的需求。下面有幾個(gè)點(diǎn)可以幫助你回答這個(gè)問題:
在 Java 中,你只能繼承一個(gè)類,但可以實(shí)現(xiàn)多個(gè)接口。所以一旦你繼承了一個(gè)類,你就失去了繼承其他類的機(jī)會(huì)了。
接口通常被用來表示附屬描述或行為如:Runnable、Clonable、Serializable 等等,因此當(dāng)你使用抽象類來表示行為時(shí),你的類就不能同時(shí)是 Runnable 和 Clonable(注:這里的意思是指如果把 Runnable 等實(shí)現(xiàn)為抽象類的情況),因?yàn)樵?Java 中你不能繼承兩個(gè)類,但當(dāng)你使用接口時(shí),你的類就可以同時(shí)擁有多個(gè)不同的行為。
在一些對時(shí)間要求比較高的應(yīng)用中,傾向于使用抽象類,它會(huì)比接口稍快一點(diǎn)。
如果希望把一系列行為都規(guī)范在類繼承層次內(nèi),并且可以更好地在同一個(gè)地方進(jìn)行編碼,那么抽象類是一個(gè)更好的選擇。有時(shí),接口和抽象類可以一起使用,接口中定義函數(shù),而在抽象類中定義默認(rèn)的實(shí)現(xiàn)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
分享名稱:「每天一個(gè)知識點(diǎn)」精講設(shè)計(jì)模式面試專題-創(chuàng)新互聯(lián)
URL分享:http://www.rwnh.cn/article48/ccjoep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、服務(wù)器托管、虛擬主機(jī)、品牌網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容