標籤:red 命令模式 寫入 活性 備忘錄模式 end 建立型模式 建立對象 常見
一、設計模式的分類
總體來說設計模式分為三大類:
建立型模式,共五種:Factory 方法模式、抽象原廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:適配器模式、裝飾器模式、代理模式、面板模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:
策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解譯器模式。
1.請列舉出在JDK中幾個常用的設計模式?
單例模式用於Runtime, Calendar和其他的一些類中。原廠模式被用於各種不可變的類如Boolean,像Boolean.valueOf方法。觀察者模式被用於swing和很多的時間監聽中。裝飾器模式被用於多個java IO類。
2.什麼是設計模式?你是否在你的代碼裡面使用過任何設計模式?
設計模式是世界上各種各樣程式員用來解決特定設計問題的嘗試和測試的方法。設計模式是代碼可用性的延伸。
3.Java 中什麼叫單例設計模式?請用Java 寫出安全執行緒的單例模式
4.解釋下什麼是觀察者模式?
觀察者模式是基於對象的狀態變化和觀察者的通訊,以便他們作出相應的操作。簡單的例子就是一個天氣系統,當天氣變化時必須在展示給公眾的視圖中進行反映。這個視圖對象是一個主體,而不同的視圖是觀察者。
5.使用原廠模式最主要的好處是什嗎?在哪裡使用?
原廠模式的最大好處是增加了建立對象時的封裝層次。
如果你使用工廠來建立對象,之後你可以使用更進階和更高效能的實現來替換原始的產品實現或類,這不需要在調用層做任何修改。
6.舉一個用Java 實現的裝飾模式(decorator design pattern)?它是作用於對象層次還是類層次?
裝飾模式增加強了單個對象的能力。Java IO 到處都使用了裝飾模式,典型例子就是Buffered 系列類如BufferedReader和BufferedWriter,它們增強了Reader和Writer對象,以實現提升效能的 Buffer 層次的讀取和寫入。
7.設計一個ATM 機,請說出你的設計思路。
比如設計金融系統來說,必須知道它們應該在任何情況下都能夠正常工作。不管是斷電還是其他情況,ATM 應該保持正確的狀態(事務) , 想想加鎖(locking)、事務(transaction
)、錯誤條件(error condition)、邊界條件(boundary condition)等等。儘管你不能想到具體的設計,但如果你可以指出非功能性需求,提出一些問題,想到關於邊界條件,這些都會是很好的。
8.在Java 中,什麼時候用重載,什麼時候用重寫?
如果你看到一個類的不同實現有著不同的方式來做同一件事,那麼就應該用重寫(overriding),而重載(overloading)是用不同的輸入做同一件事。在Java 中,重載的方法簽名不同,而重寫並不是。
9.舉例說明什麼情況下會更傾向於使用抽象類別而不是介面?
介面和抽象類別都遵循”面向介面而不是實現編碼”設計原則,它可以增加代碼的靈活性,可以適應不斷變化的需求。下面有幾個點可以協助你回答這個問題:
在 Java 中,你只能繼承一個類,但可以實現多個介面。所以一旦你繼承了一個類,你就失去了繼承其他類的機會了。介面通常被用來表示附屬描述或行為如:Runnable、Clonable、Serializable等等,因此當你使用抽象類別來表示行為時,你的類就不能同時是Runnable和Clonable(註:這裡的意思是指如果把Runnable等實現為抽象類別的情況),因為在Java 中你不能繼承兩個類,但當你使用介面時,你的類就可以同時擁有多個不同的行為。在一些對時間要求比較高的應用中,傾向於使用抽象類別,它會比介面稍快一點。如果希望把一系列行為都規範在類繼承層次內,並且可以更好地在同一個地方進行編碼,那麼抽象類別是一個更好的選擇。有時,介面和抽象類別可以一起使用,介面中定義函數,而在抽象類別中定義預設的實現。
10.什麼是 MVC 設計模式?舉一個 MVC 設計模式的例子。
11. 什麼是責任鏈模式?
12 什麼是適配器模式?舉用 Java 實現適配器模式的例子。
Java中常見設計模式面試