码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式(Singleton Pattern)

时间:2018-01-25 18:53:05      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:turn   get   类图   void   private   ima   ati   objects   tin   

模式定义

单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。

  • 只能有一个实例
  • 必须自行创建
  • 自行向整个系统提供访问

    UML类图

    技术分享图片

  • 私有静态自身类型字段
  • 私有构造方法
  • 公有静态函数返回自身对象

    代码结构

    public static class SingletonApp
    {
        public static void Run()
        {
            Singleton s1 = Singleton.Instance();
            Singleton s2 = Singleton.Instance();
    
            if(s1 == s2)
            {
                Console.WriteLine("Objects are the same instance");
            }
        }
    }
    
    public class Singleton
    {
        private static Singleton _instance;
    
        protected Singleton()
        {}
        public static Singleton Instance()
        {
            if(_instance == null)
            {
                _instance = new Singleton();
            }
    
            return _instance;
        }
    }

    多线程代码结构

    这里介绍著名的双锁机制。

    public class Singleton
    {
        private static Singleton _instance;
        protected Singleton()
        { }
        public static Singleton Instance()
        {
            if (_instance == null)
            {
                lock (typeof(Singleton))
                {
                    if (_instance == null)
                    {
                        _instance = new Singleton();
                    }
                }
            }
            return _instance;
        }
    }

    C#语法优化

    我们用的C#语言,是高级、简洁的语言。那么更简洁的写法为:(注意关键词readonly)

    public class Singleton
    {
        private static readonly Singleton _instance = new Singleton();
        protected Singleton()
        { }
        public static Singleton GetInstance()
        {
            return _instance;
        }
    }

    情景模式

    利用单例模式主要用来限制类只能实力化一个对象,所有访问都访问唯一一个对象。有时我们读取配置文件时,创建单例模式。

单例模式(Singleton Pattern)

标签:turn   get   类图   void   private   ima   ati   objects   tin   

原文地址:https://www.cnblogs.com/LoveTomato/p/8352651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!