常見設計模式筆試面試題

2021-08-22 14:53:42 字數 2290 閱讀 3134

設計模式一套被反覆使用,多數人知曉的**設計經驗的總結,實現可重用**,使**更容易被理解,保證**可靠性。

總體來說,設計模式分為三大類:

建立型模式(五種):工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式

結構型模式(七種):介面卡模式、裝飾器模式、**模式、外觀模式、橋接模式、組合模式、享元模式

行為型模式(十一種):策策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。

常見的設計模式介紹:

1、單例模式

意圖:保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

主要解決:乙個全域性使用的類頻繁地建立與銷毀。

何時使用:當您想控制例項數目,節省系統資源的時候。

如何解決:判斷系統是否已經有這個單例,如果有則返回,如果沒有則建立。

關鍵**:建構函式是私有的。

應用例項:1、乙個黨只能有乙個書記。 2、windows 是多程序多執行緒的,在操作乙個檔案的時候,就不可避免地出現多個程序或執行緒同時操作乙個檔案的現象,所以所有檔案的處理必須通過唯一的例項來進行。 3、一些裝置管理器常常設計為單例模式,比如乙個電腦有兩台印表機,在輸出的時候就要處理不能兩台印表機列印同乙個檔案。

優點:1、在記憶體裡只有乙個例項,減少了記憶體的開銷,尤其是頻繁的建立和銷毀例項(比如管理學院首頁頁面快取)。 2、避免對資源的多重占用(比如寫檔案操作)。

缺點:沒有介面,不能繼承,與單一職責原則衝突,乙個類應該只關心內部邏輯,而不關心外面怎麼樣來例項化。

使用場景:1、要求生產唯一序列號。 2、web 中的計數器,不用每次重新整理都在資料庫裡加一次,用單例先快取起來。 3、建立的乙個物件需要消耗的資源過多,比如 i/o 與資料庫的連線等。

注意事項:getinstance() 方法中需要使用同步鎖 synchronized (singleton.class) 防止多執行緒同時進入造成 instance 被多次例項化。

2、工廠模式

在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用乙個共同的介面來指向新建立的物件。

意圖:定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。

主要解決:主要解決介面選擇的問題。

何時使用:我們明確地計畫不同條件下建立不同例項時。

如何解決:讓其子類實現工廠介面,返回的也是乙個抽象的產品。

關鍵**:建立過程在其子類執行。

3、抽象工廠模式

抽象工廠模式(abstract factory pattern)是圍繞乙個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。

在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供物件。

主要解決:主要解決介面選擇的問題。

何時使用:系統的產品有多於乙個的產品族,而系統只消費其中某一族的產品。

如何解決:在乙個產品族裡面,定義多個產品。

關鍵**:在乙個工廠裡聚合多個同類產品。

4、觀察者模式

當物件間存在一對多關係時,則使用觀察者模式(observer pattern)。比如,當乙個物件被修改時,則會自動通知它的依賴物件。觀察者模式屬於行為型模式。

意圖:定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。

主要解決:乙個物件狀態改變給其他物件通知的問題,而且要考慮到易用和低耦合,保證高度的協作。

何時使用:乙個物件(目標物件)的狀態發生改變,所有的依賴物件(觀察者物件)都將得到通知,進行廣播通知。

如何解決:使用物件導向技術,可以將這種依賴關係弱化。

關鍵**:在抽象類裡有乙個 arraylist 存放觀察者們。

設計模式常見面試題

設計模式一套被反覆使用,多數人知曉的 設計經驗的總結,實現可重用 使 更容易被理解,保證 可靠性。總體來說,設計模式分為三大類 建立型模式 五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式 結構型模式 七種 介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式 行為型...

設計模式面試題

參考 常用的設計模式彙總,超詳細!這個模式本身很簡單而且使用在業務較簡單的情況下。一般用於小專案或者具體產品很少擴充套件的情況 這樣工廠類才不用經常更改 它由三種角色組成 來用類圖來清晰的表示下的它們之間的關係 抽象工廠模式 先來認識下什麼是產品族 位於不同產品等級結構中,功能相關聯的產品組成的家族...

筆試面試題

1 昨天參加一公司筆試,給幾道演算法題整懵了,其實也不難,但好久沒有碰演算法,只是有思路,要讓我在這麼短的時間內寫出程式來還是不行。2 這裡將其中一道稍微複雜一點的演算法題寫下來,以此小結。3 4 題目描述 5 將n個雞蛋放入到m個籃子中去 n m 保證每個籃子中至少乙個雞蛋,然後指定乙個數x,要求...