溫馨提示×

溫馨提示×

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

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

Java設(shè)計模式面試題有哪些

發(fā)布時間:2021-10-15 13:45:09 來源:億速云 閱讀:116 作者:小新 欄目:編程語言

這篇文章主要介紹了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í)!

向AI問一下細(xì)節(jié)

免責(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)容。

AI