单例模式

Posted qiushuizh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。

单例模式

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

  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;
        }

    }
}

 

以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块