單例設計模式之餓漢式與懶漢式

單例設計模式

設計模式是在大量的實踐中總結和理論化之後優選的代碼結構、編程風格、以及解決問題
的思考方式。設計模免去我們自己再思考和摸索,式就像是經典的棋譜,不同的棋局,我
們用不同的棋譜,“套路”
所謂類的單例設計模式,就是採取一定的方法保證在整個的軟件系統中,對某個類只能存
在一個對象實例,並且該類只提供一個取得其對象實例的方法。如果我們要讓類在一個虛
擬機中只能產生一個對象,我麼首先必須將類的構造器的訪問權限設置爲private,這樣,
就不能用new操作符在類的外部產生類的對象了,但在類內部仍可以產生該類的對象。因
爲在類的外部開始還無法得到類的對象,只能調用該類的某個靜態方法以返回類內部創建
的對象,靜態方法只能訪問類中的靜態成員變量,所以指向類內部產生的該類對象的變量
也必須定義成靜態的。
1.所謂類的單例設計模式,就是採取一定的方法保證在整個的軟件系統中,對某個類只能
存在一個對象實例

單例模式的優點:


	由於單例模式只生成一個實例,減少了系統性能開銷,當一個對象的產生需要比較多的資源時,
	如讀取配置、產生其他依賴對象時,則可以通過在應用啓動時直接產生一個單例對象,然後永久
	駐留內存的方式來解決

單例模式的應用場景
在這裏插入圖片描述

2.如何實現?
餓漢式vs懶漢式
3.區分餓漢式和懶漢式
餓漢式:
	壞處:對象加載時間過長
	好處:餓漢式是線程安全的
懶漢式:
	好處:延遲對象的創建
	<目前的寫法>壞處:線程不安全------》到多線程內容時,再修改以保證安全性

餓漢式

public class SingletonTest1 {
	public static void main(String[] args) {
		
		Bank bank1 = Bank.getInstance();
		Bank bank2 = Bank.getInstance();
		System.out.println(bank1==bank2);//true,因爲地址值相同,是同一個對象
	}
}

//餓漢式
class Bank{
	//1.私有化類的構造器
	private  Bank() {
		
	}
	
	//2.內部創建類的對象
	//4.要求此對象也必須聲明爲靜態的
	private static Bank instance = new Bank();
	
	//3.提供公共的靜態的方法,返回類的對象
	public static Bank getInstance() {
		return instance;
	}
}

懶漢式

public class SingletonTest2 {
	public static void main(String[] args) {
		Order order1 = Order.getInstance();
		Order order2 = Order.getInstance();
		System.out.println(order1==order2);//true	
	}
	

}
class Order{
	//1.私有類的構造器 
	private Order() {
		
	}
	
	//2.聲明當前類對象,沒有初始化
	//4.此對象也必須聲明爲static的
	private static Order instance = null;
	
	//3.
	public static Order getInstance() {
		if(instance == null) {
			instance = new Order(); 
		}
		return instance;
	}
	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章