更新時間:2022-12-30 11:11:51 來源:動力節(jié)點 瀏覽1301次
1.說一下設計模式?你都知道哪些?
答:設計模式總共有 23 種,總體來說可以分為三大類:創(chuàng)建型模式( Creational Patterns )、結構型模式( Structural Patterns )和行為型模式( Behavioral Patterns )。
分類 |
包含 |
關注點 |
創(chuàng)建型模式 | 工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式 | 關注于對象的創(chuàng)建,同時隱藏創(chuàng)建邏輯 |
結構型模式 | 適配器模式、過濾器模式、裝飾模式、享元模式、代理模式、外觀模式、組合模式、橋接模式 | 關注類和對象之間的組合 |
行為型模式 | 責任鏈模式、命令模式、中介者模式、觀察者模式、狀態(tài)模式、策略模式、模板模式、空對象模式、備忘錄模式、迭代器模式、解釋器模式、訪問者模式 | 關注對象之間的通信 |
下面會對常用的設計模式分別做詳細的說明。
2.什么是單例模式?
答:單例模式是一種常用的軟件設計模式,在應用這個模式時,單例對象的類必須保證只有一個實例存在,整個系統(tǒng)只能使用一個對象實例。
優(yōu)點:不會頻繁地創(chuàng)建和銷毀對象,浪費系統(tǒng)資源。
使用場景:IO 、數(shù)據(jù)庫連接、Redis 連接等。
單例模式代碼實現(xiàn):
class Singleton {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
單例模式調用代碼:
public class Lesson7_3 {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2);
}
}
程序的輸出結果:true
可以看出以上單例模式是在類加載的時候就創(chuàng)建了,這樣會影響程序的啟動速度,那如何實現(xiàn)單例模式的延遲加載?在使用時再創(chuàng)建?
單例延遲加載代碼:
// 單例模式-延遲加載版
class SingletonLazy {
private static SingletonLazy instance;
public static SingletonLazy getInstance() {
if (instance == null) {
instance = new SingletonLazy();
}
return instance;
}
}
以上為非線程安全的,單例模式如何支持多線程?
使用 synchronized 來保證,單例模式的線程安全代碼:
class SingletonLazy {
private static SingletonLazy instance;
public static synchronized SingletonLazy getInstance() {
if (instance == null) {
instance = new SingletonLazy();
}
return instance;
}
}
3.什么是簡單工廠模式?
答:簡單工廠模式又叫靜態(tài)工廠方法模式,就是建立一個工廠類,對實現(xiàn)了同一接口的一些類進行實例的創(chuàng)建。比如,一臺咖啡機就可以理解為一個工廠模式,你只需要按下想喝的咖啡品類的按鈕(摩卡或拿鐵),它就會給你生產一杯相應的咖啡,你不需要管它內部的具體實現(xiàn),只要告訴它你的需求即可。
優(yōu)點:
缺點:
簡單工廠示意圖如下:
以上就是“面試官高頻問到的問題:Java設計模式面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節(jié)點Java官網。