一、單例模式實現三要素:
●只能有乙個例項。
◆構造器私有化
●自行建立這個例項
◆含有乙個該類的靜態變數來儲存這個唯一的例項
●必須自行向整個系統提供這個例項;
◆對外提供獲取該例項物件的方式:
(1)直接暴露
(2)用靜態變數的get方法獲取
二、單例模式分類
根據物件建立的時機不同,單例模式可以分為兩類。一種是在類初始化的時候直接建立物件,稱為餓漢式;另一種是在呼叫類靜態方法時才建立物件,稱為懶漢式。
三、餓漢式
餓漢式是執行緒安全的。
1.直接例項化餓漢式
public2.列舉類餓漢式class
singleton
}
public3.靜態**塊方式enum
singleton
public這種方式適合於需要通重載入外部檔案,來例項化單例物件屬性的時候。class
singleton
private
singleton(){}
}
例如:
publicview codeclass
singleton1
catch
(ioexception e)
}private
singleton1(){}
public
string getname()
}
四、懶漢式
方式一:
public注:此方式有執行緒安全問題,只適用於單執行緒環境。class
singleton
public
static
singleton getinstance()
return
instance;}}
方式二:同步**塊
public方式三:class
singleton
public
static
singleton getinstance()
}return
instance;}}
public效率比前一種高,推薦使用class
singleton
public
static
singleton getinstance()}}
return
instance;}}
public注:在內部類被載入和初始化時,才建立工 nstance例項物件。class
singleton
private
static
class
inner
public
static
singleton getinstance()
}
靜態內部類不會自動隨著外部類的載入和初始化而初始化,它是要單獨去載入和初始化的。因為是在內部類載入和初始化時,建立的,因此是執行緒安全的。
單例模式學習筆記
單例 優點1.減少記憶體開支 2.減少效能開銷 3.寫檔案時避免資源多重占用 4.優化共享資源訪問 缺點1.自行例項化的特點導致無法擴充套件,只能修改原始碼 2.對測試不利,只有全部完成單例 才能測試 3.與單一職責原則有衝突 適用1.生成唯一序列號的環境 2.整個專案需要乙個共享訪問點 3.建立物...
單例模式學習筆記
public class student 自己造乙個 靜態方法只能訪問靜態成員變數,加靜態 為了不讓外界直接訪問修改這個值,加private private static student s new student 提供公共的訪問方式 為了保證外界能夠直接使用該方法,加靜態 public stati...
單例模式學習筆記
靜態內部類單例 反射破壞單例 序列化破壞單例 註冊式單例 threadlocal 執行緒單例 單例模式 singleton pattern 是指確保乙個類在任何情況下都絕對只有乙個例項 public class hungrysingleton public static hungrysingleto...