现在的位置: 首页 > 综合 > 正文

设计模式 之 单例模式(Singleton)

2011年05月02日 ⁄ 综合 ⁄ 共 1588字 ⁄ 字号 评论关闭

单例模式:

在我们的程序中,经常的会出现这个的情况,既:在整个程序中,只保持一个类的一个实例,因此,我们可以用单例模式。

单例模式可以分 懒汉式单例类,饿汉式单例类,两个不同点在于:一个是 饿汉式单例类 自己初始化的时候已经实例了该类。相同点都在于:自己为自己实例化。当然,既然是单例模式,就必须自己能够初始化并提供实例对象。

using System;
using System.Collections.Generic;
using System.Text;

namespace 单例模式
{
    /// <summary>
    /// 懒汉式单例类,双重检查
    /// </summary>
    public class Singleton
    {
        private static volatile Singleton singleton = null;

        private Singleton()
        { }
        public static Singleton GetSingleton()
        {
            if (singleton == null)
            {
                lock (typeof(Singleton))
                {
                    if (singleton == null)
                    {
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;
        }
    }

    public class 饿汉式单例类
    {
        private static readonly 饿汉式单例类 一个饿汉式单例类实例 = new 饿汉式单例类();
        private 饿汉式单例类()
        { }
        public static 饿汉式单例类 GetSingleton()
        {
            return 一个饿汉式单例类实例;
        }
       
    }
}

也许我们会认为,在我们的经常开发的系统中,经常的会用到一些全程变量,那我们可不可以用单例模式来满足呢?呵呵,本人没研究过,但是,个人认为,可以把这些全程变量用一个单例类来保存起来。

同时,还有种情况,如我们在操作数据库的时候,sqlconnection连接,我们似乎可以用单例类,保持整个系统只有一个sqlconnection实例,个人感觉,这个不太应该,单例模式要求,只有在真正需要单一实例的时候,才用单列,显然,我们sqlconnection,并不是需要单一的,同时,我们也要考虑,sqlconnection连接,我们不可能一直的长期占有该连接,既我们不可能open一个连接后,一直的不close吧?

(上面两段话,是依据java与模式 一书上所讲单例模式的习题所总结的,个人还是没搞明白,呵呵。)

最近,在做一个项目的时候,经常的看见有些很象单例模式的代码。

如下:

/// <summary>
    ///     /// </summary>
    public class Singleton
    {
        public static readonly Singleton Default= new Singleton();

public Singleton()

{

}
    }

上面的代码,应该也算一个单例类,但是,不应该算一个完全的单例类,别人为什么这样写,我还没研究出来。以后补上吧

 

付上一些好的文章连接:

http://terrylee.cnblogs.com/archive/2005/12/09/293509.html

抱歉!评论已关闭.