您的位置:首页 > 其它

面向对象设计模式之Singleton单例模式

2012-02-24 09:32 351 查看
动机:在软件系统中,经常有这样的一些特殊的类,必须保证它们在系统中 只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率

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

UML图:



示例代码:

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

namespace Singleton
{
/// <summary>
/// 只适用单线程下的单例模式,在多线程下无法保证其唯一实例
/// </summary>
//public class Singleton
//{
//    private static Singleton instance;
//    private Singleton() { }
//    public static Singleton Instance
//    {
//        get
//        {
//            if (instance == null)
//            {
//                instance = new Singleton();
//            }
//            return instance;
//        }
//    }
//}

/// <summary>
/// 第一种:多线程单例模式的设计
/// </summary>
//public class Singleton
//{
//    //volatile 会保证编译器不对代码指令的执行调整顺序,而保证其严格意义上的的按顺序执行
//    private static volatile Singleton instance=null;
//    private static object lockHepler = new object();//起辅助作用
//    private Singleton() { }
//    public static Singleton Instance
//    {
//        get
//        {
//            if (instance==null)
//            {
//                lock (lockHepler)
//                {
//                    if (instance == null)
//                    {
//                        instance = new Singleton();
//                    }
//                }
//            }
//            return instance;
//        }
//    }
//}

/// <summary>
/// 第二种:多线程单例模式的设计
/// </summary>
public class Singleton
{
public static readonly Singleton Instance = new Singleton();//内联初始化
private Singleton() { }
}

/// <summary>
/// 第二种实现等同于下面的实现,但这两者的弊端:就是不支持参数化传递的构造器
/// </summary>
//public class Singleton
//{
//    public static readonly Singleton Instance;

//    //.NET机制会保证只有一个线程执行此82行代码,以加锁的方式防止又一个线程执行
//    //在第一次访问任意静态字段之前,都会执行静态构造器,以保证静态字段都已初始化
//    static Singleton() { Instance = new Singleton(); }
//    private Singleton() { }
//}

}

注:本示例代码是本人学习Webcast C#面向对象设计模式纵横谈系列讲座视频时,跟着李建忠老师一步一步的编写的,在此奉献出来,仅供大家参考
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: