中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

「每天一個知識點」精講設計模式面試專題

發布時間:2020-07-23 21:52:29 來源:網絡 閱讀:204 作者:Android丶VG 欄目:移動開發

前言:

設計模式的分類

設計模式分為三類

創建型設計模式
與對象創建有關包括單例模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式

結構型設計模式
結構性設計模式是從程序的結構上解決模塊之間的耦合問題,包括適配器模式,代理模式,裝飾模式,外觀模式,橋接模式,組合模式和享元模式

行為型設計模式
主要處理類或對象如何交互及如何分配職責,包括策略模式,模板方法模式,觀察者模式,迭代器模式,責任鏈模式,命令模式,備忘錄模式,狀態模式,訪問者模式,中介模式,解析器模式

「每天一個知識點」精講設計模式面試專題

設計模式六大原則

a. 單一職責原則:就一個類來說,應該只有一個引起它變化的原因
一個類做一件事情,避免職責過多。比如這種情況是不太好的,在一個 Activity中既有 bean 文件,又有 http 請求,還有 adapter 等等,這就導致我們需要修改任何一個東西的時候都會導致 Activity 的改變,這樣一來就有多個引起它變化的原因,不符合單一職責原則

b. 開放封閉原則:類,模塊,函數應該是可以擴展的,但是不可以修改
對于擴展是開放的,對于修改是封閉的。盡量做到面對需求的改變時,我們的代碼能保持相對穩定,通過擴展的方式應對變化,而不是修改原有代碼實現

c. 里氏替換原則:所有引用基類的地方,必須可以透明的時候其子類的對象
里氏替換原則是實現開放封閉原則的重要方式之一,我們知道,使用基類的地方都可以使用子類去實現,因為子類擁有基類的所有方法,所以在程序設計中盡量使用基類類型對對象進行定義,在運行時確定子類類型。

d. 依賴倒置原則:高層模塊不應該依賴于底層模塊,兩者都應該依賴于抽象,抽象不應該依賴于細節,細節應該依賴于抽象
依賴倒置原則針對的是模塊之間的依賴關系,高層模塊指調用端,底層模塊指具體的實現類,抽象指接口或抽象類,細節就是實現類。該原則的具體表現就是模塊間的依賴通過抽象發生,直線類之間不發生直接依賴關系,依賴通過接口或抽象類產生,降低耦合,比如 MVP 模式下,View 層和 P 層通過接口產生依賴關系

e. 迪米特原則(最少知識原則):一個軟件實體應該盡可能少的與其他實體發生相互作用
迪米特原則要求我們在設計系統時,盡量減少對象之間的交互

f. 接口隔離原則:一個類對另一個類的依賴應該建立在最小的接口上
接口隔離原則的關鍵是接口以及這個接口要小,如何小呢,也就是我們要為專門的類創建專門的接口,這個接口只對它有效,不要試圖讓一個接口包羅萬象,要建立最小的依賴關系

1. 請列舉出在 JDK 中幾個常用的設計模式?

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

2. 什么是設計模式?你是否在你的代碼里面使用過任 何設計模式?

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

3.Java 中什么叫單例設計模式?請用 Java 寫出線程安全的單例模式

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

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

觀察者模式是基于對象的狀態變化和觀察者的通訊,以便他們作出相應的操作。簡單的例
子就是一個天氣系統,當天氣變化時必須在展示給公眾的視圖中進行反映。這個視圖對象是一個主體,而不同的視圖是觀察者。

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

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

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

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

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

Java 中不能從靜態上下文訪問非靜態數據只是因為非靜態變量是跟具體的對象實例關聯的,而靜態的卻沒有和任何實例關聯。

8. 設計一個 ATM 機,請說出你的設計思路?

比如設計金融系統來說,必須知道它們應該在任何情況下都能夠正常工作。不管是斷電還是其他情況,ATM 應該保持正確的狀態(事務) , 想想 加鎖(locking)、事務(transaction)、錯誤條件(error condition)、邊界條件(boundary condition) 等等。盡管
你不能想到具體的設計,但如果你可以指出非功能性需求,提出一些問題,想到關于邊界條件,這些都會是很好的。

9. 在 Java 中,什么時候用重載,什么時候用重寫?

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

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

接口和抽象類都遵循”面向接口而不是實現編碼”設計原則,它可以增加代碼的靈活性,可以適應不斷變化的需求。下面有幾個點可以幫助你回答這個問題:

在 Java 中,你只能繼承一個類,但可以實現多個接口。所以一旦你繼承了一個類,你就失去了繼承其他類的機會了。

接口通常被用來表示附屬描述或行為如:Runnable、Clonable、Serializable 等等,因此當你使用抽象類來表示行為時,你的類就不能同時是 Runnable 和 Clonable(注:這里的意思是指如果把 Runnable 等實現為抽象類的情況),因為在 Java 中你不能繼承兩個類,但當你使用接口時,你的類就可以同時擁有多個不同的行為。

在一些對時間要求比較高的應用中,傾向于使用抽象類,它會比接口稍快一點。

如果希望把一系列行為都規范在類繼承層次內,并且可以更好地在同一個地方進行編碼,那么抽象類是一個更好的選擇。有時,接口和抽象類可以一起使用,接口中定義函數,而在抽象類中定義默認的實現。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南雄市| 广安市| 基隆市| 连平县| 阿拉善左旗| 四子王旗| 阳城县| 瑞昌市| 安远县| 新巴尔虎右旗| 鞍山市| 东光县| 双桥区| 绩溪县| 云林县| 阜南县| 丰原市| 个旧市| 铜梁县| 高安市| 来凤县| 渭源县| 浦江县| 安达市| 海晏县| 富蕴县| 永德县| 邮箱| 诏安县| 铜陵市| 沁阳市| 固镇县| 宽甸| 静宁县| 广州市| 江山市| 密云县| 始兴县| 右玉县| 化州市| 河西区|