單例模式(singleton pattern):確保乙個類有且只有乙個例項,並提供乙個全域性訪問點。
主要特點:
1、構造方法私有化;
2、例項化的變數引用私有化;
3、獲取例項的方法共有;
應用場景:
例如:執行緒池(threadpool)、快取(cache)、預設設定、登錄檔(registry)、配置資料、日誌物件等等。
package com.xm.designpattern.single;
/** * 單例模式-餓漢模式
* 原理: 不管是否使用,類載入時就初始化好
* 缺點: 非執行緒安全,只適合單執行緒使用
* @author ouyangjun
*/public class hungrysingle
}
package com.xm.designpattern.single;
/** * 單例模式-懶漢模式
* @author ouyangjun
*/public class lazysingle
return lazysingle;
} /**
* 原理: 在需要用到例項的時候才去建立
* 缺點: 執行緒安全,可多執行緒使用,但比較消耗效能,因為不是所有情況都需要同步
* @return
*/private lazysingle lazysinglesafe = null;
public synchronized lazysingle getinstancesafe()
return lazysinglesafe;}}
package com.xm.designpattern.single;
/** * 單例模式-懶漢模式,雙重安全校驗
* 原理: 當例項為空的時候,先鎖定,再建立例項,再放開鎖,原理上是沒問題的,可使用
* 缺點: 多重校驗,容易出錯
* @author ouyangjun
*/public class doublelazysingle }}
return doublelazysingle;}}
package com.xm.designpattern.single;
/** * 單例模式-內部類實現
* 原理: 單列初始化不會載入,在呼叫getinstance()方法時才進行載入,推薦使用
* @author ouyangjun
*/public class internalclasssingle
public internalclasssingle getinstance()
}
簡單案例:
public enum enumsingleton
}
完整案例:
public class dblinkutils
//定義乙個靜態列舉類
static enum singletonenum
public dblinkutils getinstnce()
}// 對外暴露乙個獲取dblinkutils物件的靜態方法
設計模式 第一章工廠模式
乙個物件應該只包含單一的職責,並且該職責被完整的封裝到乙個類中 軟體實體應該對擴充套件開放,對修改關閉 所有引用基類的地方必須能透明的使用其子類物件 高層模組不應該依賴底層模組,他們都應該依賴抽象,抽象不應該依賴細節,細節應該依賴於抽象 客戶端不應該依賴他那些不需要的介面 優先使用物件組合,而不是通...
第一章 設計模式分類
工廠方法模式 factory pattern 抽象工廠模式 abstract factory pattern 單例模式 singleton pattern 建造者模式 builder pattern 原型模式 prototype pattern 介面卡模式 adapter pattern 裝飾器模式...
大話設計模式 第一章 簡單工廠模式
實現乙個計算器控制台程式 活字印刷 第一,要改,只需改要改之字,此為可維護 第二,這些字用完依然可用,此為可復用 第三,若要加字只需另刻再加入即可,此為可擴充套件 第四,可橫排可豎排,此為靈活性好 複製vs復用 將計算和顯示分開 即將業務邏輯和介面邏輯分開 public class operatio...