您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java設(shè)計模式面試題有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
1:什么是設(shè)計模式?
就是經(jīng)過實踐驗證的用來解決特定環(huán)境下特定問題的解決方案
2:設(shè)計模式用來干什么?
尋找合適的對象
決定對象的粒度
指定對象的接口
描述對象的實現(xiàn)
運用復(fù)用機制
重復(fù)使用經(jīng)過實踐驗證的正確的,用來解決某一類問題的解決方案來達(dá)到減少
工作量、提高正確率等目的。
3:什么是對象粒度
對象中方法的多少就是粒度
4:基本的Java編程設(shè)計應(yīng)遵循的規(guī)則?
面向接口編程,優(yōu)先使用對象組合
5:設(shè)計模式的應(yīng)用范圍
所能解決的特定的一類問題中
6:簡述什么是單例模式,以及他解決的問題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì)?
在任何時間內(nèi)只有一個類實例存在的模式。
需要有一個從中進行全局訪問和維護某種類型數(shù)據(jù)的區(qū)域的環(huán)境下使用單例模式。
解決方案就是保證一個類只有一個類實例存在。
本質(zhì)就是實例共用同一塊內(nèi)存區(qū)域。
7:代碼示例:單例模式的兩種實現(xiàn)方法,并說明優(yōu)缺點
public class Test{ public Test(){ } private static Test test = new Test(); public static Test getInstance(){ return test; } }
public class Test{ private static Test test = null; private Test(){ } public static Test getInstance(){ if(test==null){ test = new Test(); } return test; } }
第二種方式不需每次都創(chuàng)建一個類實例,而只是在第一次創(chuàng)建
8:簡述什么是工廠模式,以及他解決的問題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì)
利用工廠來解決接口選擇的問題的模式。
應(yīng)用環(huán)境:當(dāng)一個類無法預(yù)料要創(chuàng)建哪種類的對象或是一個類需要由子類來指定創(chuàng)建的對象時,就需要用到工廠模式。
解決方案:定義一個創(chuàng)建對象的接口,讓子類來決定具體實例化哪一個類。
本質(zhì)就是根據(jù)不同的情況來選擇不同的接口。
9:代碼示例:工廠模式的實現(xiàn)方法
public class Factory{ public static Sample creator(int which){ if (which==1){ return new SampleA(); }else if (which==2) return new SampleB(); } } } Public class MyFactory{ Public static myFactory f = null; Public MyFactory(){ } Public static MyFactory getInstance(){ If(f==null){ F=new MyFactory(); } } Public DBDAO getDAO(){ Return new DBDAOImpl(); } }
10:述什么是值對象模式,以及他解決的問題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì)
用來把一組數(shù)據(jù)封裝成一個對象的模式。
解決問題:在遠(yuǎn)程方法的調(diào)用次數(shù)增加的時候,相關(guān)的應(yīng)用程序性能將會有很大的下降。
解決方案:使用值對象的時候,可以通過僅僅一次方法調(diào)用來取得整個對象,而不是使用多次方法調(diào)用以得到對象中每個域的數(shù)值。
本質(zhì):就是把需要傳遞的多個值封裝成一個對象一次性傳過去。
11:代碼示例:值對象模式的實現(xiàn)方法
public class UserModel{ private String userId; private String userName; public void setUserId(String id){ this.userId = id; } public String getUserId(){ return userId; } public void setUserName(String name){ this.userName = name; } public String getUserName(){ return userName; } }
12:簡述什么是DAO模式,以及他解決的問題,應(yīng)用的環(huán)境,解決的方案,模式的本質(zhì)
DAO:數(shù)據(jù)訪問對象
解決問題:根據(jù)數(shù)據(jù)源不同,數(shù)據(jù)訪問也不同。根據(jù)存儲的類型(關(guān)系數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫、純文件等)和供應(yīng)商實現(xiàn)不同,持久性存儲(如數(shù)據(jù)庫)的訪問差別也很大。如何對存儲層以外的模塊屏蔽這些復(fù)雜性,以提供統(tǒng)一的調(diào)用存儲實現(xiàn)。程序的分布式問題。
解決方案:是將數(shù)據(jù)訪問邏輯抽象為特殊的資源,也就是說將系統(tǒng)資源的接口從其底層訪問機制中隔離出來;通過將數(shù)據(jù)訪問的調(diào)用打包,數(shù)據(jù)訪問對象可以促進對于不同數(shù)據(jù)庫類型和模式的數(shù)據(jù)訪問。
DAO的本質(zhì):就是一層屏蔽一種變化。
本質(zhì):分層,是系統(tǒng)組件和數(shù)據(jù)源中間的適配器。(一層屏蔽一種變化)
13:代碼示例:DAO模式的實現(xiàn)方法
public interface CustomerDAO { public int insertCustomer(...); public Collection selectCustomersVO(...); }
14:什么是開放-封閉法則(OCP)
可擴展但是不可以更改已有的模塊
對擴展是開放的 對修改是封閉
15:什么是替換法則(LSP)
使用指向基類(超類)的引用的函數(shù),必須能夠在不知道具體派生類(子類)對象
類型的情況下使用
16:如何綜合使用我們學(xué)過的設(shè)計模式來構(gòu)建合理的應(yīng)用程序結(jié)構(gòu)
是采用接口進行隔離,然后同時暴露值對象和工廠類,如果是需要數(shù)據(jù)存儲的功能,又會通過DAO 模式去與數(shù)據(jù)存儲層交互。
17:構(gòu)建常用的合理的Java應(yīng)用包結(jié)構(gòu)
Ui(表現(xiàn)層)
business--factory,ebi,ebo
dao--factory,dao,impl
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Java設(shè)計模式面試題有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。