本文章根據劉偉(sunny) 的設計模式一書記錄的筆記,感謝作者的知識分享。
單例模式
(singleton pattern):確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,它提供全域性訪問的方法。單例模式是一種物件建立型模式。
實現一
public
class
taskmanage
private
static taskmanage install = null;
/** * 自己建立例項,並提供給外界使用
*/public
static taskmanage getinstall()
return install;
}public
void
paint()
}
面臨多執行緒的時候會出現構建多個例項物件的問題
實現二
基於多執行緒安全改造
餓漢式實現單例,缺點就是可能會浪費資源
public
class
eagersingleton
/** * 給外面提供單例物件
*/public
static eagersingleton getinstall()
public
void
paint()
}
懶漢式實現單例(直接是雙重檢查鎖定實現的懶漢式單例類)
public
class
lazysingleton
/** * 新增synchronized關鍵字,保證了多執行緒的同步
* 但是由於synchronized修飾的是getinstall方法,所以效能比較低,所以可以進行修改
* @return
*/// synchronized public static lazysingleton getinstance()
// return install;
// }
/** * 只有在單例物件為null的時候,才會進行鎖的判斷
* 但是當兩個執行緒同時進入鎖判斷的時候,乙個執行緒獲得鎖進行單例的例項化的結束之後,另外乙個執行緒還是會繼續例項化單例物件,所以需要新增二重判斷
* @return
*/// public static lazysingleton getinstall()
// }
// return install;
// }
/** * 新增二重判斷之後,就算另外乙個執行緒繼續例項化,但是之後會進行install判斷才決定是否建立
* 這時候需要在install前面加上volatile關鍵字,保證多執行緒操作的正確性
* 儘管如此,加鎖之後效能還是有影響的
* @return
*/public
static lazysingleton getinstall()
}}return install;
}}
實現三綜合懶漢餓漢的優缺點的iodh實現單例,將執行緒安全交託給jvm負責
public
class
singleton
static
class
iohdsingleton
public
static singleton getinstall()
}
2.主要缺點
單例模式的主要缺點如下:
3.適用場景
在以下情況下可以考慮使用單例模式:
設計模式 建立型模式 單例模式
類載入時建立物件 常量 class eagersingleton public static eagersingleton getinstance 延遲載入 假如在某一瞬間 執行緒a 和 執行緒b 都在呼叫getinstance 方法,此時instance物件為null值,均能通過instance ...
設計模式建立型模式 單例模式
單例模式 singletonparrten 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點 建立單例模式需要三方面操作 1.建立乙個物件 2.定義乙個私有構造方法 禁止外部類對其進行例項化 3.提供乙個對外訪問的方法 單例模式可以通過懶漢式和餓漢式來實現。懶漢式 執行緒不安全 懶漢式 單例模...
設計模式 建立型模式 單例模式
優點 缺點頻繁使用 建立與銷毀 資源占用較多,例項化消耗大且耗時長,通過共享單例,加快物件的訪問速度 類要求只生成乙個例項的場景 需要單一控制邏輯的操作。具體如 多執行緒執行緒池 網路連線池 訪問資料庫或者檔案的物件等等。結構主要角色 實現 懶漢式實現 實現特點 該模式的特點是類載入時沒有生成單例,...