中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

「每天一個(gè)知識點(diǎn)」精講設(shè)計(jì)模式面試專題-創(chuàng)新互聯(lián)

前言:

設(shè)計(jì)模式的分類

設(shè)計(jì)模式分為三類

創(chuàng)建型設(shè)計(jì)模式
與對象創(chuàng)建有關(guān)包括單例模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式

成都創(chuàng)新互聯(lián)是一家專業(yè)提供儋州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、html5、小程序制作等業(yè)務(wù)。10年已為儋州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

結(jié)構(gòu)型設(shè)計(jì)模式
結(jié)構(gòu)性設(shè)計(jì)模式是從程序的結(jié)構(gòu)上解決模塊之間的耦合問題,包括適配器模式,代理模式,裝飾模式,外觀模式,橋接模式,組合模式和享元模式

行為型設(shè)計(jì)模式
主要處理類或?qū)ο笕绾谓换ゼ叭绾畏峙渎氊?zé),包括策略模式,模板方法模式,觀察者模式,迭代器模式,責(zé)任鏈模式,命令模式,備忘錄模式,狀態(tài)模式,訪問者模式,中介模式,解析器模式

「每天一個(gè)知識點(diǎn)」精講設(shè)計(jì)模式面試專題

設(shè)計(jì)模式六大原則

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)系

1. 請列舉出在 JDK 中幾個(gè)常用的設(shè)計(jì)模式?

單例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些類中。工廠模式(Factory pattern)被用于各種不可變的類如 Boolean,像 Boolean.valueOf,觀察者模式(Observer pattern)被用于 Swing 和很多的事件監(jiān)聽中。裝飾器設(shè)計(jì)模式(Decorator design pattern)被用于多個(gè) Java IO 類中。

2. 什么是設(shè)計(jì)模式?你是否在你的代碼里面使用過任 何設(shè)計(jì)模式?

設(shè)計(jì)模式是世界上各種各樣程序員用來解決特定設(shè)計(jì)問題的嘗試和測試的方法。設(shè)計(jì)模式是代碼可用性的延伸

3.Java 中什么叫單例設(shè)計(jì)模式?請用 Java 寫出線程安全的單例模式

單例模式重點(diǎn)在于在整個(gè)系統(tǒng)上共享一些創(chuàng)建時(shí)較耗資源的對象。整個(gè)應(yīng)用中只維護(hù)一個(gè)特定類實(shí)例,它被所有組件共同使用。Java.lang.Runtime 是單例模式的經(jīng)典例子。從 Java5 開始你可以使用枚舉(enum)來實(shí)現(xiàn)線程安全的單例。

4. 在 Java 中,什么叫觀察者設(shè)計(jì)模式(observer design pattern )?

觀察者模式是基于對象的狀態(tài)變化和觀察者的通訊,以便他們作出相應(yīng)的操作。簡單的例
子就是一個(gè)天氣系統(tǒng),當(dāng)天氣變化時(shí)必須在展示給公眾的視圖中進(jìn)行反映。這個(gè)視圖對象是一個(gè)主體,而不同的視圖是觀察者。

5. 使用工廠模式最主要的好處是什么?在哪里使用?

工廠模式的大好處是增加了創(chuàng)建對象時(shí)的封裝層次。如果你使用工廠來創(chuàng)建對象,之后你可以使用更高級和更高性能的實(shí)現(xiàn)來替換原始的產(chǎn)品實(shí)現(xiàn)或類,這不需要在調(diào)用層做任何修改。

6. 舉一個(gè)用 Java 實(shí)現(xiàn)的裝飾模式(decorator design pattern) ?它是作用于對象層次還是類層次?

裝飾模式增加強(qiáng)了單個(gè)對象的能力。Java IO 到處都使用了裝飾模式,典型例子就是Buffered 系列類如 BufferedReader 和BufferedWriter,它們增強(qiáng)了 Reader 和 Writer 對象,以實(shí)現(xiàn)提升性能的 Buffer 層次的讀取和寫入。

7. 在 Java 中,為什么不允許從靜態(tài)方法中訪問非靜態(tài)變量?

Java 中不能從靜態(tài)上下文訪問非靜態(tài)數(shù)據(jù)只是因?yàn)榉庆o態(tài)變量是跟具體的對象實(shí)例關(guān)聯(lián)的,而靜態(tài)的卻沒有和任何實(shí)例關(guān)聯(lián)。

8. 設(shè)計(jì)一個(gè) ATM 機(jī),請說出你的設(shè)計(jì)思路?

比如設(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ì)是很好的。

9. 在 Java 中,什么時(shí)候用重載,什么時(shí)候用重寫?

如果你看到一個(gè)類的不同實(shí)現(xiàn)有著不同的方式來做同一件事,那么就應(yīng)該用重寫(overriding),而重載(overloading)是用不同的輸入做同一件事。在 Java 中,重載的方法簽名不同,而重寫并不是。

10. 舉例說明什么情況下會(huì)更傾向于使用抽象類而不是接口?

接口和抽象類都遵循”面向接口而不是實(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)

微信小程序開發(fā)
襄垣县| 洪洞县| 合作市| 山阴县| 锦屏县| 西青区| 赤水市| 桃江县| 尤溪县| 长汀县| 深州市| 通渭县| 舞阳县| 江口县| 平度市| 阳江市| 交城县| 博白县| 杂多县| 邯郸县| 大理市| 新昌县| 大新县| 特克斯县| 金门县| 澎湖县| 荆州市| 泰宁县| 黎平县| 青川县| 平顶山市| 通海县| 梁山县| 阿拉善左旗| 彰化市| 冀州市| 湘乡市| 安福县| 石门县| 原平市| 扎兰屯市|