面試官系統之設計模式(單例模式)

2021-08-18 19:40:27 字數 2629 閱讀 9965

單例模式:

顧名思義就是只能有乙個,不能在出現第二個。就如同地球上沒有兩片完全一模一樣的樹葉一樣。

程式猿的角度理解:乙個類有且只能有乙個例項,不能出現第二個,並且整個專案系統中都能訪問該例項。

面試官:為啥不能出現第二個?

程式猿:。。。(這個面試官是笨蛋,出現第二個那就不叫單例模式了,那至少得叫雙例模式,是吧?)

面試官:為啥整個專案系統中都能訪問該例項?

程式猿:不能訪問該例項,那new出來還有什麼意義。

面試官:那你給我寫個單例模式吧

程式猿:寫就寫,這能難倒我,哼,先寫個懶漢式單例(第一種

package com.tang.study.singleton;

/** * 單例模式

* 懶漢式單例

* created by tgp on 2018/4/15.

*/public class singletonpatternone

///關鍵點1:宣告單例物件是靜態的

private static singletonpatternone instance = null;

//通過靜態方法來構造物件

public static singletonpatternone getinstance()

return instance;

}public void showmessage()

}

面試官:你這**遇到多執行緒的併發條件下就不安全了吧。在if判斷那裡,如果兩個執行緒同時訪問,

有可能給new出多個單例例項,都多個了,還是屁的「單例」啊。

程式猿:(額,好像也是,幸虧我還有點乾貨,再擼一段),那我給您再寫一段(第二種

/**

* 單例模式

* 餓漢式單例

* created by tgp on 2018/4/15.

*/public class singletonpatterntwo

///關鍵點1:宣告單例物件是靜態的

private static singletonpatterntwo instance = new singletonpatterntwo();

//通過靜態方法來構造物件

public static singletonpatterntwo getinstance()

public void showmessage()

面試官:那你給我講講你寫的這種單例模式的優缺點

程式猿:

優點:這種寫法在類載入的時候就完成物件的例項化,避免了執行緒不安全的問題。

缺點:在類載入的時候就完成了例項化,如果這個類一直沒用,就會造成記憶體的浪費。

面試官:這種方式是解決了執行緒不安全的問題,但記憶體浪費總是不太好吧,尤其是伺服器的記憶體都是很貴的

程式猿:好吧,那我給您優化優化(

第三種

public class singletonpatternthree 

///關鍵點1:宣告單例物件是靜態的

private static singletonpatternthree instance = null;

//通過靜態方法來構造物件

public static synchronized singletonpatternthree getinstance()

return instance;

}public void showmessage()

}

面試官:記憶體浪費和執行緒安全的問題都解決了,那方法加鎖會影響效率,多執行緒的情況,第乙個訪問方法期間,其它使用者只能等待,使用者體驗太差

程式猿:(有完沒完了。。)逼我放大招(

第四種:雙重檢查)

//通過靜態方法來構造物件

public static singletonpatternfour getinstance()}}

return instance;

}public void showmessage()

面試官:這種不錯,那你還會其它的實現方法嗎?

程式猿:(我會的可多了,都拿出來怕嚇著你)我還會幾種別的(

第五種:靜態內部類

public class singleton 

private static class singletoninstance

public static singleton getinstance()

}

程式猿:類的靜態屬性只會在第一次載入類的時候初始化,所以在這裡,jvm幫助我們保證了執行緒的安全性,在類進行初始化時,別的執行緒是無法進入的。

優點:避免了執行緒不安全,延遲載入,效率高。

第六種:列舉

public enum singleton   

}

經驗之談:

一般情況下,推薦雙檢鎖方式和靜態內部類。

吊錘面試官的單例模式大全

餓漢一 餓漢式優點 寫法簡單 執行緒安全的 缺點 還沒被呼叫就物件就被載入了,不夠節約 public class singleton public static singleton getinstance 測試方法用於證明餓漢單例模式下fianl修飾單例物件的作用 注意必須是餓漢式,懶漢式不考慮使用...

面試官常問的設計模式

設計模式分為三大類 建立型模式,共五種 工廠方法模式 抽象工廠模式 單例模式 建造者模式 原型模式。結構型模式,共七種 介面卡模式 裝飾器模式 模式 外觀模式 橋接模式 組合模式 享元模式。行為型模式,共十一種 策略模式 模板方法模式 觀察者模式 迭代子模式 責任鏈模式 命令模式 備忘錄模式 狀態模...

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...