定義:乙個類只允許產生乙個例項化物件。
我們先想想類的例項化物件是如何產生的?
它是通過類的構造方法產生的。現在只讓乙個類產生乙個例項化物件,我們就要考慮從它的構造方法入手,我們可以把建構函式私有化,這樣它就不能在類的外部被呼叫了。
但如果我們還想在類的外部呼叫類內函式,就必須通過類的例項化物件來呼叫,但建構函式已經被私有化了,我們就需要在類內部產生乙個例項化物件。
我們先來看乙個簡單的例子:
class person
public void print()
}
如果我們想在主類中呼叫person類中的print()函式,就必須通過person類的例項化物件來定義,但per只是person類中的乙個普通屬性,所有的普通屬性必須在有例項化物件的時候才能進行記憶體空間的分配,但建構函式被私有化了,在類的外部是無法進行物件例項化的。所以我們必須想辦法,讓per這個屬性在沒有例項化物件的時候就可以使用,我們就想到了static這個關鍵字,static是類屬性,可以通過類名呼叫,與物件例項化物件無關。
class person
public void print()
}public class test
}
上邊這個**雖然可以取得person類的例項化物件,但對類中的屬性應該私有化,用private修飾,如果想要取得private封裝的屬性,就得用getter()方法,此時要訪問的是static修飾的屬性,所以提供的getter()方法也必須是static修飾的。
class person
public static person getper()
public void print()
}public class test
}
上邊這段**就是乙個完整的單例模式
單例模式的兩種形式
單例模式又分為懶漢式單例和餓漢式單例。
餓漢式單例:上來就new
這個上來就new的意思是,不管你是否使用person這個類的物件,只要該類載入了,就一定會建立乙個公共的per物件。我們希望在整體的操作中只能夠有乙個例項化物件,所以一般會在前邊加上final關鍵字。
class person
public static person getper()
public void print()
}public class test
}
懶漢式單例模式:當第一次去使用person類的例項化物件的時候才會去new,為其此時例項化物件。
class person
public static person getper()
return per;
}public void print()
}public class test
}
Java中的單例模式
一 概述 單例模式的寫法有好幾種,這裡主要有三種 懶漢式單例 餓漢式單例 登記式單例。單例模式有以下特點 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,...
Java中的單例模式
保證只有乙個物件 類載入的時候物件就已經存在,餓漢式是執行緒安全的,在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不再改變,上述例子就是乙個惡漢式 類載入的時候物件還不存在,就是所謂的延遲載入方式,需要時再進行建立,懶漢式如果在建立例項物件時不加上synchronized則會導致對物件的訪...
java 中的單例模式
單例模式 一 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。1.構造方法私有化 2.宣告乙個本類的物件 3.給外部提供乙個靜態方法用來讓外部獲取物件例項 二 兩種實現方式 餓漢式 懶漢式餓漢式 private static single01 single new single01 餓漢式 ...