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

简介:

一、单例模式简介(Brief Introduction

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

二、解决的问题(What To Solve

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

三、单例模式分析(Analysis

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、实例运行结果










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

目录
相关文章
|
4月前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
4月前
|
设计模式 算法
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
41 1
设计模式 - 行为型模式_ 访问者模式Visitor Pattern
|
4月前
|
设计模式 Java 应用服务中间件
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
37 1
|
4月前
|
设计模式 缓存 安全
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
设计模式 - 创建型模式_ 单例模式 Singleton Pattern
40 0
|
20天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
16 1
|
存储 设计模式
Net设计模式实例之享元模式( Flyweight Pattern)
一、享元模式简介(Brief Introduction) 享元模式(Flyweight Pattern),运用共享技术有效支持大量细粒度的对象。 Use sharing to support large numbers of fine-grained objects efficiently. 享元模式可以避免大量非常相似类的开销。
693 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
45 0