首页 > 其他 > 详细

创建型设计模式 - 单例模式

时间:2021-05-12 10:03:48      阅读:9      评论:0      收藏:0      [点我收藏+]

单例模式

概念

单例模式是创建型设计模式之一。这种模式涉及到一个单一的类,该类负责创建自己的对象, 同时确保只有单个对象被创建。所以有时会到说单例模式违背了职责单一原则。

结构图

技术分享图片

核心代码

23种设计模式github代码

public class SingletonThreadSafe
    {
        private SingletonThreadSafe()
        { 
        }

        private static SingletonThreadSafe _instance = null;

        private static readonly object obj = new object();

        public static SingletonThreadSafe GetInstance()
        {
            //双IF加锁  IF-LOCK-IF

            //第一个IF判断该对象有没有被实例化
            if (_instance == null)
            {
                //如果没有被实例化,加锁,这个时刻只允许一个用户进去实例化,其他的用户等待
                lock (obj)
                {
                    //判断有没有用户已经实例化了,因为在lock等待的时候,排在前面的肯定已经实例化成功了,所以这里也要加上IF二次判断一下
                    if (_instance == null)
                    {
                        _instance = new SingletonThreadSafe();
                    }
                }
            }
            return _instance;
        }

        
    }

优缺点

优点

  1. 在内存中保证只有一个实例,减少内存开销;
  2. 避免对共享资源的多重占用(比如写文件操作)。

缺点

  1. 在一定程度上违背了单一职责原则;
  2. 滥用单例可能会带来一些负面问题,如为了节省资源将数据库连接池对象设计为单例,可能会导致共享连接池对象的程序过多出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾对象自动回收,这将导致对象状态的丢失。

应用场景

  • 要求生产唯一序列号
  • WEB中的计数器,不用每次刷新都在数据库中加一次,用单例先缓存起来
  • 创建一个对象需要消耗的资源过多,比如I/O与数据库连接等

创建型设计模式 - 单例模式

原文:https://www.cnblogs.com/Huangxiaomao/p/14758088.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!