WYVE

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1)单例模式的实现

①定义private static 实例。

②定义private构造函数,组织外部通过构造函数构造对象。

③定义public static Get方法。

④多线程时,Get方法中采用 2-if-1-lock 写法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DesignMode
{
    public class SingletonClass
    {
        private static SingletonClass instance;
        private static readonly object locker = new object();
        private SingletonClass()
        {
        }

        static public SingletonClass GetSingletonInstance()
        {
            if (instance == null)
            {
                lock (locker)
                {
                    if (instance == null)
                    {
                        instance = new SingletonClass();
                    }
                }
            }
            return instance;
        }


    }
}

 

2)测试

        static void TestSingleton()
        {
            SingletonClass single1 = SingletonClass.GetSingletonInstance();
            SingletonClass single2 = SingletonClass.GetSingletonInstance();
            if (single1 == single2)
            {
                Console.WriteLine("equal");
            }
        }

 

3)何时使用单例模式。

例如创建对象特别耗资源(时间,内存),希望只创建1次,之后拿来就用。

 4)其他实现方法

①定义private构造函数

②定义Static 变量,该变量在类第一次使用时初始化,多线程时不需要锁。

    public class SingletonPatternStatic
    {
        public static SingletonPatternStatic Instance = new SingletonPatternStatic();
        private SingletonPatternStatic()
        {
            Thread.Sleep(2000);
            Console.WriteLine("SingletonPatternStatic()");
        }
    }

 

posted on 2018-04-13 12:44  WYVE  阅读(109)  评论(0编辑  收藏  举报