Net设计模式实例之单例模式( Singleton Pattern)(1)

一、单例模式简介(Brief Introduction

单例模式(Singleton Pattern,保证一个类只有一个实例,并提供一个访问它的全局访问点。单例模式因为Singleton封装它的唯一实例,它就可以严格地控制客户怎样访问它以及何时访问它。

二、解决的问题(What To Solve

当一个类只允许创建一个实例时,可以考虑使用单例模式。      

三、单例模式分析(Analysis

1、单例模式结构

Net设计模式实例之单例模式( Singleton Pattern)(1)
 
Singleton,定义一个私有变量instance;私有构造方法Singleton()和方法GetInstance();
私有变量instance:
private static Singleton instance;
私有构造方法Singleton(),外界不能使用new关键字来创建此类的实例了。
private Singleton()
{
}
方法GetInstance(), 此方法是本类实例的唯一全局访问点。
public static Singleton GetInstance()
{
    //如实例不存在,则New一个新实例,否则返回已有实例
    if (instance == null)
    {
        instance = new Singleton();
    }
    return instance;
}

2、代码

1、单例模式类Singleton
public class Singleton
{
    private static Singleton instance;
 
    /// <summary>
    /// 程序运行时,创建一个静态只读的进程辅助对象
    /// </summary>
    private static readonly object _object = new object();
 
    /// <summary>
    /// 构造方法私有,外键不能通过New类实例化此类
    /// </summary>
    private Singleton()
    {
    }
    /// <summary>
    /// 此方法是本类实例的唯一全局访问点
    /// (双重加锁 Double-Check Locking
    /// </summary>
    /// <returns></returns>
    public static Singleton GetInstance()
    {
        //先判断实例是否存在,不存在再加锁处理
        if (instance == null)
        {
            //在同一时刻加了锁的那部分程序只有一个线程可以进入,
            lock (_object)
            {
                //如实例不存在,则New一个新实例,否则返回已有实例
                if (instance == null)
                {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
 
2、客户端代码
static void Main(string[] args)
{
    Singleton singleton1 = Singleton.GetInstance();
    Singleton singleton2 = Singleton.GetInstance();
    if (singleton1 ==singleton2)
    {
        Console.WriteLine("实例singleton1与实例singleton2相同!");
    }
    Console.ReadKey();
}

3、实例运行结果

Net设计模式实例之单例模式( Singleton Pattern)(1)









本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/264522,如需转载请自行联系原作者

上一篇:乐在其中设计模式(C#) - 单例模式(Singleton Pattern)


下一篇:长连接与短连接