【小白的java成長系列】——構造方法私有化(單例設計)

原文鏈接: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、簡化對象創建過程的複雜性。。這個怎麼說呢,要看對象創建的複雜性了~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章