什么是單例模式?
我所理解的單例模式:整個程序中只允許有唯一的一個對象(這個類只能實例化一次)
看看我找到的解釋:當一個類只能有一個對象時,往往會用到單例模式,例如,現實生活中有很多臨界資源,像 打印機、處理器(單核)、皇帝、太子等等,它們都是稀有資源,只能有一個實例對象。
單例模式有哪些方式實現?
第一種最簡單,但沒有考慮線程安全,在多線程時可能會出問題。(懶單例)
public class Singleton { private static Singleton _instance = null; //1.聲明一個私有方法(外部無法調用) private Singleton(){} //2.聲明一個公共的靜態的創建上面私有方法(實現外部可以調用到聲明的私有的單例方法) public static Singleton CreateInstance() { //如果已經存在這個對象了就不要再創建新的,直接返回該對象 //如果這個對象不存在就new一個新的唄 if(_instance == null) { _instance = new Singleton(); } return _instance; } }
第二種考慮了線程安全
public class Singleton { private volatile static Singleton _instance = null; private static readonly object lockHelper = new object(); private Singleton(){} public static Singleton CreateInstance() { if(_instance == null) { lock(lockHelper) { if(_instance == null) _instance = new Singleton(); } } return _instance; } }
class MyClass { private static MyClass my = new MyClass(); private MyClass() { } public static MyClass GetMyClass() { return my; } }
第三種可能是C#這樣的高級語言特有的
public class Singleton { private Singleton(){} public static readonly Singleton instance = new Singleton(); }
寫個例子。
實現方式沒有仔細研究,先記個懶單例吧。抽空看看大話設計模式。。。
好吧,例子已經在上面了。。。