首页 > 设计模式 > 初尝Singlton 设计模式

初尝Singlton 设计模式

最近那个项目的工作停滞了。我深切的感受到,基础知识不扎实带来的苦痛。反正在没有新的安排之前,我会继续自学。然后…不知道有什么然后。今天开始继续学习、复习设计模式。

設計模式(design pattern)這個術語是在1990年代,由Erich Gamma等人,從建築設計領域引入到計算機科學裡去的。是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。設計模式並不直接用來完成程式碼的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種方案。物件導向設計模式通常以類別或物件來描述其中的關係和相互作用,但不涉及用來完成應用程式的特定類別或物件。設計模式主要是使不穩定的依賴於相對穩定、具體依賴於相對抽象,避免會引起麻煩的緊耦合,以增強軟體設計面對並適應變化的能力

动机

在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。

意图

保证一个类仅有一个实例,并提供一个该实例的全局访问点。

代码

    ///
    /// 利用.net 的内部机制,较为简洁的实现了Singlton
    /// 优点:支持多线程
    /// 缺点:初始化时,不能传参(相关参数可以通过其他方式调用,如属性)
    ///
    class Singlton
    {
        private Singlton() { }

        public static readonly Singlton Instance = new Singlton();
    }

    ///
    /// 实际上,同上述实现方式一致。
    /// 在调用Instance 之前Singlton2 的静态函数就已经执行,并只执行一次。
    ///
    class Singlton2
    {
        public static readonly Singlton2 Instance;

        static Singlton2()
        {
            Instance = new Singlton2();
        }

        private Singlton2()
        { }
    }
    ///
    /// 最常见的Singlton 实现方式
    ///
    class Singlton3
    {
        public static Singlton3 Instance;

        private Singlton3() { }

        public Singlton3 getInstance
        {
            get
            {
                if (Instance == null)
                {
                    Instance = new Singlton3();
                }
                return Instance;
            }
        }
    }
    ///
    /// 用双重锁支持多线程的实现方式
    ///
    class Singlton4
    {
        private static Singlton4 Instance;

        private static object locker=new object(); 

        private Singlton4() { }

        public Singlton4 getInstance
        {
            get
            {
                if (Instance == null)
                {
                    lock (locker)
                    {
                        if (Instance == null)
                        {
                            Instance = new Singlton4();
                        }
                    }
                }
                return Instance;
            }
        }
    }
  1. 2010年3月18日13:26 | #1

    友情回帖

  2. 邵 明博
    2010年3月18日22:14 | #2

    真,不知道说点什么好。

  1. 2010年4月17日18:21 | #1
  2. 2010年5月9日19:39 | #2