設(shè)計(jì)模式

設(shè)計(jì)模式(一)


單例設(shè)計(jì)模式

單例就是某個實(shí)體只產(chǎn)生一個對象,如果只能產(chǎn)生一個對象那么就需要將構(gòu)造函數(shù)設(shè)置為private的,那么就無法手動去創(chuàng)建該類的實(shí)體對象。

public class Student {

? ? ?private Student(){}

? ? ?private static Student s=new Student();

? ? ?public static Student getInstance(){

? ? ? ? ? return s;

? ? ?}

}

由于在類中直接創(chuàng)建除了實(shí)體的對象,這種方式被稱為餓漢式。但是如果創(chuàng)建該對象的時候需要消耗大量的資源,那么在不使用該對象的時候盡量不要去初始化

public class Student {

? ? ?private Student(){

? ? ?//消耗很多資源

? ? ?}

? ? ?private static Student s;

? ? ?public static Student getInstance(){

? ? ? ? ? if(s==null){

? ? ? ? ? ? ? ?s=new Student();

? ? ? ? ? }

? ? ? ? ? return s;

? ? ?}

}

上面這種方式避免了在不需要使用實(shí)體對象的時候?qū)?shí)體對象進(jìn)行初始化,但是在多線程并發(fā)的時候,會出現(xiàn)線程1執(zhí)行到s=new Student()的時候線程2執(zhí)行到if(s==null),這個時候就有可能創(chuàng)建兩個實(shí)體對象,為了避免以上的情況出現(xiàn)需要添加synchronized關(guān)鍵字。

public class Student {

? ? ?private static Student s;

? ? ?private Student(){}

? ? ?public static Student getInstance(){

? ? ? ? ? if(s == null){

? ? ? ? ? ? ? ?synchronized(Student.class){

? ? ? ? ? ? ? ? ? ? if(s == null){

? ? ? ? ? ? ? ? ? ? ? ? ?s = new Student();

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ?}

? ? ? ? ? }

? ? ? ? ? return instance;

? ? ?}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,627評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 前言 本文主要參考 那些年,我們一起寫過的“單例模式”。 何為單例模式? 顧名思義,單例模式就是保證一個類僅有一個...
    tandeneck閱讀 2,623評論 1 8
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,995評論 0 11
  • 面向?qū)ο蟮牧笤瓌t 單一職責(zé)原則 所謂職責(zé)是指類變化的原因。如果一個類有多于一個的動機(jī)被改變,那么這個類就具有多于...
    JxMY閱讀 1,017評論 1 3

友情鏈接更多精彩內(nèi)容