標籤:私人化 java 記憶體 spring singleton
有瞭解過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、簡化對象建立過程的複雜性。。這個怎麼說呢,要看對象建立的複雜性了~