java 单例方法_Java-单例模式 - 惊觉
單例模式
單例(Singleton)模式是設(shè)計模式之一,最顯著的特點就是一個類在一個JVM中只有一個實例,避免繁瑣的創(chuàng)建銷毀實例。
簡單例子
先看簡單的單例模式實現(xiàn)完整代碼:
Singleton_Test類使用單例模式 ,采用餓漢式方法。
public class Singleton_Test {
private Singleton_Test() {
System.out.println("私有化構(gòu)造方法");
}
//餓漢式
private static Singleton_Test Instance = new Singleton_Test();
public static Singleton_Test getInstance() {
return Instance;
}
}
再編寫一個測試類Main
public class Main {
public static void main(String args[]) {
Singleton_Test test1 = Singleton_Test.getInstance();
Singleton_Test test2 = Singleton_Test.getInstance();
System.out.println(test1 == test2);
/**
運行結(jié)果:
私有化構(gòu)造方法
true
*/
}
}
逐步分析
1.構(gòu)造方法私有化
首先,實現(xiàn)單例模式的類,構(gòu)造方法私有化(private),外部無法實例化(new)該類。
public class Singleton_Test {
private Singleton_Test(){
System.out.println("私有化構(gòu)造方法");
}
}
無法實例化 Singleton_Test 類。
2.私有靜態(tài)類屬性指向?qū)嵗?/p>
所以需要提供一個public static 方法 getInstance(),外部通過這個方法獲取對象,并且由于是 實例化的同一個類,所以外部每次調(diào)用都是調(diào)用同一個方法,從而實現(xiàn)一個類只有一個實例。
private static Singleton_Test Instance = new Singleton_Test();
//餓漢式
private static Singleton_Test Instance ;
//懶漢式
3.使用公有靜態(tài)方法返回實例
返回的都是同一個類,保證只實例化唯一一個類
public static Singleton_Test getInstance(){
return Instance;
}
4.測試類
public static void main(String args[]) {
Singleton_Test test1 = Singleton_Test.getInstance();
Singleton_Test test2 = Singleton_Test.getInstance();
System.out.println(test1 == test2);
/**
運行結(jié)果:
私有化構(gòu)造方法
true
*/
}
輸出結(jié)果表示,實例化的是同一個類,并只調(diào)用一次構(gòu)造方法。
單例模式的實現(xiàn)
餓漢式
這種方式無論是否調(diào)用,加載時都會創(chuàng)建一個實例。
private static Singleton_Test Instance = new Singleton_Test();
public static Singleton_Test getInstance(){
return Instance;
}
懶漢式
這種方式,是暫時不實例化,在第一次調(diào)用發(fā)現(xiàn)為null沒有指向時,再實例化一個對象。
private static Singleton_Test Instance ;
public static Singleton_Test getInstance(){
if (Instance == null){
Instance = new Singleton_Test();
}
return Instance;
}
區(qū)別
餓漢式的話是聲明并創(chuàng)建對象(他餓),懶漢式的話只是聲明對象(他懶),在調(diào)用該類的 getInstance() 方法時才會進行 new對象。
餓漢式立即加載,會浪費內(nèi)存,懶漢式延遲加載,需要考慮線程安全問題 什么是線程安全/不安全
餓漢式基于 classloader 機制,天生實現(xiàn)線程安全,懶漢式是線程不安全。需要加鎖 (synchronized)校驗等保證單例,會影響效率
總結(jié)
構(gòu)造方法私有化
private Singleton_Test(){}
私有靜態(tài)(static)類屬性指向?qū)嵗?/p>
private static Singleton_Test Instance
使用公有靜態(tài)方法返回實例
public static Singleton_Test getInstance(){ return Instance;}
轉(zhuǎn)載自CSDN-專業(yè)IT技術(shù)社區(qū)
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
總結(jié)
以上是生活随笔為你收集整理的java 单例方法_Java-单例模式 - 惊觉的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习之路 | PTA乙级—— 10
- 下一篇: java 多线程统计质数,Java 七