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

设计模式--单例模式(Singleton)

时间:2016-01-10 22:44:34      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

简述:单例模式顾名思义在一个程序运行的全部阶段,其实例化对象都只有一个,实际环境的运用包括window操作系统中的任务管理器、程序中的错误日志处理对象等。

单例模式具体实现分为“饥汉模式”、“饱汉模式”。

实现前提:私有化构造函数、屏蔽对外开放的实例化构造函数

“饥汉模式”:(又名懒汉模式,使用的时候再实例化)

public class Global
    {
        /// <summary>
        /// 私有化构造函数
        /// </summary>
        private Global ()
        {
        }

        /// <summary>
        /// 用于存储单例对象.
        /// </summary>
        private static Global _single = null;
        /// <summary>
        /// 设定.
        /// </summary>
        /// <value>The single.</value>
        public static Global Single {
            get{
                if (_single == null)
                    _single = new Global ();
                return _single;
            }
        }
  }

“饱汉模式”:(不管用不用,先实例化了再说)

public class FreeGlobal
    {
        /// <summary>
        /// 私有化构造函数
        /// </summary>
        private FreeGlobal ()
        {
        }

        /// <summary>
        /// 用于存储单例对象.
        /// </summary>
        private static FreeGlobal _single = new FreeGlobal();
        /// <summary>
        /// 设定.
        /// </summary>
        /// <value>The single.</value>
        public static FreeGlobal Single {
            get{
return _single;
            }
        }
  }

测试结果:

技术分享


线程安全设定:

在多线程的情况下,可能会出现多个实例的情况,所以可以通过线程锁进行处理。

public class FreeGlobal
    {
        private FreeGlobal ()
        {
        }
        private static FreeGlobal _single = new FreeGlobal();
        /// <summary>
        /// 用于线程锁定对象.
        /// </summary>
        private static object obj = new object ();
        public static FreeGlobal Single {
            get{
                lock (obj) {//锁定
                    return _single;
                }
            }
        }
    }

单例模式的变异版本:

public class SingleInCSharp
    {
        private SingleInCSharp(){}
        public static SingleInCSharp Single = new SingleInCSharp();
    }

当然了,实现方式有很多种,但是最核心的思想就是“私有化构造函数”。

个人理解,如有偏颇,敬请指教!

设计模式--单例模式(Singleton)

标签:

原文地址:http://www.cnblogs.com/szfBlogs/p/5119148.html

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