原文鏈接:http://dtbuluo.com/68.html
有了解過spring框架的童鞋們就知道,spring的bean默認是什麼形式呀?———單例形式的。
問:那什麼叫做單例?單例其實就是Singleton,顧名思義就是隻有單個的實例對象操作。
那爲什麼要使用單例呢?
至於這個問題,後面再做解釋,我們先看代碼:
package me.javen.oop;
public class SingletonDemo {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2);
}
}
class Singleton{
private static Singleton singleton;
public static Singleton getInstance(){//提供唯一的對象獲取口
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
private Singleton(){//私有化構造方法
System.out.println("只創建一次~");
}
}
我想問一下同志們,這個的輸出是什麼?
運行輸出結果:
只創建一次~
true
我們可以看到singleton1和singleton2是相等的,意味着這兩個對象是同一個對象。
首先來看一下私有化構造方法:
意味着外部使用Singleton這個類的時候,不能通過new關鍵字創建對象了。。以下會報錯。。
都不能new了,那我們怎麼使用Singleton類呢?
通過以下方式公開:
public static Singleton getInstance(){//提供唯一的對象獲取口
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
能不能不提供這樣的一個方法?
當然能嘍,只是不提供這樣的一種方式,你這個類就真的無法使了~
現在來回答開篇的那個問題,爲什麼要使用單例?
1、減少不必要的內存開銷,你想啊,要是創建10個對象,就得開銷10分內存吧,而單例就1個對象,當然就開銷1份內存嘍。。
如果能減少內存開銷,那我們在設計類的時候,可不可以都設計成單例的?這樣不是很節省內存。。這個問題,先不解釋哈~留給學習的好童鞋思考
2、簡化對象創建過程的複雜性。。這個怎麼說呢,要看對象創建的複雜性了~