設計模式連殺

2021-09-09 05:46:52 字數 2773 閱讀 5738

面試過程中可能會問及一些設計模式相關的問題,這一類主要是看你寫**時的思考,是否能寫出更好的**、最好根據結合實際業務情況說一兩個例子。說說使用了***設計模式之後能解決***問題。下面總結一些基礎問題及其相應的可能的回答。只是乙個例子,設計模式這一塊需要有自己的思考。但是需要有一些標準指導,比如六大原則兩大標準之類的。

物件導向:

物件導向是一種思想,是基於面向過程而言的,就是說物件導向是將功能等通過物件來實現,將功能封裝進物件之中,讓物件去實現具體的細節;這種思想是將資料作為第一位,而方法或者說是演算法作為其次,這是對資料一種優化,操作起來更加的方便,簡化了過程。

物件導向有三大特徵:封裝性、繼承性、多型性

其中封裝性指的是隱藏了物件的屬性和實現細節,僅對外提供公共的訪問方式,這樣就隔離了具體的變化,便於使用,提高了復用性和安全性。

對於繼承性,就是兩種事物間存在著一定的所屬關係,那麼繼承的類就可以從被繼承的類中獲得一些屬性和方法;這就提高了**的復用性。繼承是作為多型的前提的。

多型是說父類或介面的引用指向了子類物件,這就提高了程式的擴充套件性,也就是說只要實現或繼承了同乙個介面或類,那麼就可以使用父類中相應的方法,提高程式擴充套件性,但是多型有一點不好之處在於:父類引用不能訪問子類中的成員。

兩大標準: 高內聚、低耦合

六大原則

單一原則(職責單一)

乙個方法只幹一件事

乙個介面只幹乙個事…

黎克特制替換原則(抽象和繼承)

子類必須完全實現父類的方法

子類可以有自己的個性

覆蓋/實現父類方法時,入參可被放大

覆蓋/實現父類方法時,輸出可縮小

依賴倒置原則(面向介面程式設計)

高層模組不該依賴低層模組,二者都應該依賴其抽象;

抽象不應該依賴於細節

介面隔離原則(介面最小化)

只依賴需要的介面,依賴的介面最小化

迪公尺特法則(降低類與類的耦合)

類與類之間應保持最小的了解

開閉原則(對拓展開放,對修改關閉)

軟體需要變化時,盡量通過拓展軟體實體的行為來實現變化,而不是通過修改已有**

根據個人實際使用情況說明即可,但是自己說出的設計模式一定要熟悉,能說出個門道來.最好是自己結合自己的專案來講講用這個設計模式帶來的好處. 所有的設計模式可以參考 菜鳥教程-設計模式。 以下簡單舉例幾個設計模式.

單例模式

定義: 乙個類有且僅有乙個例項,並且自行例項化向整個系統提供。

作用: 一般是針對一些建立物件時比較消耗資源的情況.使用單例模式可以減少系統開銷。

實現方式: 懶漢模式、餓漢模式

手寫**:

public class singleton 

// 靜態內部類

private static class singletonholder

// jvm的類載入機制確保該方法沒有執行緒安全問題

public static singleton getinstance()

}

建立者模式

定義: 將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示

作用: 建立者模式隱藏了複雜物件的建立過程,通常用於常見複雜物件

責任鏈模式

定義: 使多個物件都有機會處理同乙個請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止

作用: 職責鏈上的處理者負責處理請求,客戶只需要將請求傳送到職責鏈上即可,無須關心請求的處理細節和請求的傳遞,所以職責鏈將請求的傳送者和請求的處理者解耦了

eg. servlet中的filter

策略模式

定義: 定義一系列的演算法,把它們乙個個封裝起來, 並且使它們可相互替換

作用: 在有多種演算法相似的情況下,使用 if…else 所帶來的複雜和難以維護

eg. 代收郵件,定義代收行為。實際策略有imap,pop,aws等多種

模板方法模式

定義: 定義乙個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變乙個演算法的結構即可重新定義該演算法的某些特定步驟

作用: 靈活地實現具體的演算法,滿足使用者靈活多變的需求。

eg. jdk中的基於aqs實現的一些工具類,如countdownlatch

so easy. 十分基礎的問題,知道即可.

ioc

控制反轉,原理就是使用了jdk的反射,直接容器幫你構造實體bean.

反射的話可能還會問問反射的相關方法. 這個自行去看jdk.

aop

面向切面程式設計,其原理就是通過動態**。最常見的使用場景就是日誌記錄,比如需要記錄每個方法的請求耗時等。

待續

23種設計模式(11) 責任連模式

定義 使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。型別 行為類模式 類圖 首先來看一段 public void test int i,request request else if i 2 else i...

23種設計模式(11) 責任連模式

定義 使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。型別 行為類模式 類圖 首先來看一段 public void test int i,request request else if i 2 else i...

責任連模式

定義 使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條 鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。型別 行為類模式 類圖 1.14 command pattern 首先來看一段 public void test int i,request requ...