码迷,mamicode.com
首页 > Windows程序 > 详细

C#设计模式:单例模式

时间:2017-11-28 19:54:03      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:main   避免   led   c#   col   应该   on()   设计   pre   

在c#中的单例模式是指在一个AppDomain中只会存在一个经过实例化的对象。单例模式的作用的避免创建更多本来不用创建的对象,因为有一些对象在使用上没有必要创建那么多,一个就够了。单例模式实现起来的话要遵循一下几个特点:

. 单例类都只有一个private的无参构造函数
. 类声明为sealed(不是必须的)
. 类中有一个静态变量保存着所创建的实例的引用
. 单例类会提供一个静态方法或属性来返回创建的实例的引用(eg.GetInstance)

根据这几个特点,首先是方法1:

 public class Singleton
    {
        private static  Singleton _instance;

        private Singleton()
        {

        }
        public static Singleton Instance => _instance ?? (_instance = new Singleton());
    }

这样,调用Singleton的静态属性Instance可以获取这个对象的唯一的实例,但是在多线程访问中由于该操作不是原子的,还是会可能创建多个实例,所以应该在这个静态属性的逻辑中加入锁(lock),这样一来,问题解决了,但是锁对性能的损耗不能忽视,于是,又出现了没有锁的并且性能较好的一种方法:

 public class AnotherSingleton
    {
        private static readonly AnotherSingleton _instance = new AnotherSingleton();

       
        static AnotherSingleton()
        {

        }

        private AnotherSingleton()
        {
           
        }

        public static AnotherSingleton Instance
        {
            get
            {
                return _instance;
            }

        }
    }

具体方法是加入一个静态的构造函数,静态函数的作用在于初始化类级别的静态属性或字段,这种方法完美的解决了锁带来的性能损耗问题同时又实现了单例。

我的原则是有一个好用的就没必要去展示其他不好用的例子了,用这个就够了。

C#设计模式:单例模式

标签:main   避免   led   c#   col   应该   on()   设计   pre   

原文地址:http://www.cnblogs.com/pangjianxin/p/7911386.html

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