1. 程式人生 > >設計模式的分類 與 單例模式

設計模式的分類 與 單例模式

設計模式GOF23(Group of four 四人幫) 一、設計模式是面向物件思想中重要的一點。 二、模式分為分為三種: 1.建立型模式:幫助我們建立物件 (1)單例模式 (2)工廠模式 (3)抽象工廠模式 (4)建造者模式 (5)原型模式 2.結構型模式: (1)介面卡模式 (2)橋接模式 (3)裝飾模式 (4)組合模式 (5)外觀模式 (6)享元模式 (7)代理模式 3.行為型模式: (1)模版方式模式 (2)命令方式 (3)迭代器模式 (4)觀察者模式 (5)中介者模式 (6)備忘錄模式 (7)直譯器模式 (8)狀態模式 (9)策略模式 (10)職責鏈模式 (11)訪問者模式 三、單例模式: 1、核心作用:保證一個類只有一個物件,並提供一個訪問該物件的全域性訪問點。

2、常見應用場景: (1)Windows的工作管理員:無論啟動多少次工作管理員,只有一個。 (2)回收站 (3)讀取配置檔案的類 (4)網站的計數器 (5)應用系統的日誌應用

3.單例模式的優點: 由於單例模式只生成一個例項,減少系統性能開銷,當一個物件的產生需要比較多的資源時,入讀取配置、產生其他依賴物件時,可通過在應用啟動時直接產生一個單例物件,然後永久主流記憶體的方式來解決。

4.五種單例模式實現方式: 主要: (1)餓漢式(執行緒安全,呼叫效率高,但是不能延時載入) 可以省略synchroized關鍵字。因為餓漢式單例程式碼中,static變數會在裝載類時初始化,不會涉及對多個執行緒物件訪問該物件的問題。 問題:如果只是載入本類,而不是要呼叫getIsnstance()方法,甚至永遠沒有呼叫,則會造成資源浪費。

(2)懶漢式(執行緒安全,呼叫效率不高,但是可以延時載入) 要點:延遲載入,懶載入!真正用的時候才載入! 問題:資源利用率高了,但是每次呼叫getInstance()方法都要同步,併發效率低。

其他: (3)雙重檢測鎖式 (4)靜態內部類式 (5)列舉單例

package singleton;
/*餓漢式單例模式
 * 第一步:私有化構造器
 * 第二部:提供靜態屬性,載入這個類時就把物件new出來,初始化給這個靜態屬性
 */
public class SingletonDemo1 {
	
	//類初始化時立即載入這個物件(沒有延時載入的優勢),天然的是執行緒安全的!
	private static SingletonDemo1 instance = new SingletonDemo1();

	private SingletonDemo1() {	//私有化構造器
	}
	
	//方法沒有同步,呼叫效率高!
	public static SingletonDemo1 getInstanse(){
		return instance;
	}
}

package singleton;

//懶漢式單例模式
public class SingletonDemo2 {
	
	//類初始化時,不初始化這個物件(延時載入,真正用的時候再建立)
	private static SingletonDemo2 instance;

	private SingletonDemo2() {	//私有化構造器	
	}
	
	//方法同步,呼叫效率低!
	public static synchronized SingletonDemo2 getInstance(){
		if(instance==null){
			instance = new SingletonDemo2();
		}
		return instance;		
	}
}