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

一、单例模式简介(Brief Introduction

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

二、解决的问题(What To Solve

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

三、单例模式分析(Analysis

1、单例模式结构

<?XML:NAMESPACE PREFIX = V />

 

Singleton ,定义一个私有变量 instance; 私有构造方法 Singleton() 和方法 GetInstance();

私有变量 instance:

private static Singleton instance;

私有构造方法 Singleton(), 外界不能使用 new 关键字来创建此类的实例了。

private Singleton()

{

}

方法 GetInstance(), 此方法是本类实例的唯一全局访问点。

public static Singleton GetInstance()

{

    // 如实例不存在,则 New 一个新实例,否则返回已有实例

    if (instance == nu<?XML:NAMESPACE PREFIX = ST1 />ll )

    {

        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 <?XML:NAMESPACE PREFIX = ST2 />Main (string [] args)

{

    Singleton singleton1 = Singleton .GetInstance();

    Singleton singleton2 = Singleton .GetInstance();

    if (singleton1 ==singleton2)

    {

        Console .WriteLine(" 实例singleton1 与实例singleton2 相同!" );

    }

    Console .ReadKey();

}

3、实例运行结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值