zoukankan      html  css  js  c++  java
  • .net中的设计模式---单例模式

    .net设计模式:

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

     一 : 单例模式的简介:(Brief Introduction)

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

    二、解决的问题(What To Solve)

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

     三.单例模式分析(Analysis

    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;

    }

    单例模式代码

    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 singleton2 = Singleton.GetInstance();

        Singleton singleton3 = Singleton.GetInstance();

        if (singleton2 ==singleton3)

        {

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

        }

        Console.ReadKey();

    }

    单例模式也可以不用枷锁,例如在一个类中使用三层技术调用类:

      #region  获取自身的单例模式:UserInfo 代表了Bll层中的类文件

            private static UserInfo instance;

            public static UserInfo GetInstance()

            {

                if (instance==null)

                {

                    instance = new UserInfo ();

                }

                return instance;

            }

            #endregion

    在表示层调用:

    .BLL . UserInfo   bll = BLL. UserInfo.GetInstance();

     

  • 相关阅读:
    iOS web加载本地html文件图片不显示问题
    Mac 已损坏,无法打开。 您应该将它移到废纸篓。
    iOS随机数
    Objective-C 【NSString-字符串比较&前后缀检查及搜索】
    Objective-C 【从文件中读写字符串(直接读写/通过NSURL读写)】
    Objective-C 【protocol 的引用问题】
    Objective-C 【protocol-协议 的了解使用】
    C 【block类型全方位详解】
    Objective-C 【Category-非正式协议-延展】
    Objective-C 【This is ARC】
  • 原文地址:https://www.cnblogs.com/zxtceq/p/8657729.html
Copyright © 2011-2022 走看看