單例的基礎上升級了一下,把對象從記憶體層面複製了一下,然後返回。是個新對象,但是又不是new出來的。 ...
單例的基礎上升級了一下,把對象從記憶體層面複製了一下,然後返回。是個新對象,但是又不是new出來的。
/// <summary> /// 原型模式:單例的基礎上升級了一下,把對象從記憶體層面複製了一下,然後返回 /// 是個新對象,但是又不是new出來的 /// </summary> public class Prototype { /// <summary> /// 構造函數耗時耗資源 /// </summary> private Prototype() { long lResult = 0; for (int i = 0; i < 10000000; i++) { lResult += i; } Thread.Sleep(2000); Console.WriteLine("{0}被構造一次", this.GetType().Name); } /// <summary> /// 3 全局唯一靜態 重用這個變數 /// </summary> private static volatile Prototype _Prototype = new Prototype(); /// <summary> /// 2 公開的靜態方法提供對象實例 /// </summary> /// <returns></returns> public static Prototype CreateInstance() { Prototype prototype = (Prototype)_Prototype.MemberwiseClone(); return prototype; } //既然是單例,大家用的是同一個對象,用的是同一個方法,那還會併發嗎 還有線程安全問題嗎? public int iTotal = 0; public void Show() { this.iTotal++; } }