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

单例模式

时间:2019-03-24 20:07:17      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:多线程   names   现在   效果   创建   调用   类对象   ado   turn   

单例模式

  单例模式的目的是为了让一个类只有一个实例.为了实现这个效果,我们需要控制类实例化的入口,那么,就需要自己实现方法,来控制类的实例化了.

  1\类实例化一般有两种情况,一种是直接使用构造函数,另一种是使用静态方法.这里,我们可以封装一个静态方法,把实例化的入口控制住

  2\实例化的入口控制住之后,我们要做的就是保证每次实例化都是同一个对象

  具体实现如下:

    

namespace SingleModeSecond
{
    public class SingleModeClass
    {
        //定义一个私有字段,存放类对象
        private static SingleModeClass single;
        //一个对象,用来在多线程中保证实例的唯一性
        private static readonly object lockObj = new object();
        //将构造函数设置为私有,这样就关闭了使用构造函数实例化对象的入口
        private SingleModeClass()
        {

        }
        //使用一个静态方法来创建类实例,现在类实例化的方法有我们控制了
        public static SingleModeClass CrateInstanceSingleModeClass()
        {
            //现在要实例化对象了,如果对象已经被实例化了,那么直接返回这个对象,
            //如果对象还未被实例化,那么调用构造函数,实例化对象
            if (single==null)
            {
                //在多线程中,如果两个线程同时创建对象,而此时single又为null,那么这样就会执行两次构造函数,
                //产生两个独享了,这里我们定义一个对象,对他加锁,这样就可以保证多线程下的唯一对象了.
                lock (lockObj)
                {
                    if(single==null)
                    single = new SingleModeClass();
                }
            }
            return single;
        }

    }
}

 

单例模式

标签:多线程   names   现在   效果   创建   调用   类对象   ado   turn   

原文地址:https://www.cnblogs.com/qiushuizh/p/10589939.html

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