zoukankan      html  css  js  c++  java
  • .net 4种单例模式

    转载:

    https://www.cnblogs.com/dreign/archive/2012/05/08/2490212.html

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace SingletonDemo
    {
        /// <summary>
        /// 1、普通单例
        /// </summary>
        public class SingletonA
        {
            private static SingletonA _instance = null;
            private SingletonA() { }
            public static SingletonA CreateInstance()
            {
                if (_instance == null)
                {
                    _instance = new SingletonA();
                }
                return _instance;
            }
        }
    
        /// <summary>
        /// 2、线程安全单例
        /// </summary>
        public class SingletonB
        {
            private volatile static SingletonB _instance = null;
            private static readonly object lockHelper = new object();
            private SingletonB() { }
            public static SingletonB CreateInstance()
            {
                if (_instance == null)
                {
                    lock (lockHelper)
                    {
                        if (_instance == null)
                            _instance = new SingletonB();
                    }
                }
                return _instance;
            }
        }
        /// <summary>
        /// 3、使用.net特性的支持多线程的单件模式代码
        /// </summary>
        public sealed class SingletonC
        {
            private SingletonC() { }
            public static readonly SingletonC Instance = new SingletonC();
        }
    
        /// <summary>
        /// 4、使用 C# 2.0 泛型来完成单例模式的重用
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class SingletonProvider<T> where T : new()
        {
            SingletonProvider() { }
    
            public static T Instance
            {
                get { return SingletonCreator.instance; }
            }
    
            class SingletonCreator
            {
                static SingletonCreator() { }
    
                internal static readonly T instance = new T();
            }
        }
        /// <summary>
        /// 4、业务类demo
        /// </summary>
        public class TestClass
        {
            private string _createdTimestamp;
    
            public TestClass()
            {
                _createdTimestamp = DateTime.Now.ToString();
            }
    
            public void Write()
            {
                Console.WriteLine(_createdTimestamp);
            }
        }
        /// <summary>
        /// 4、范型单例示例
        /// </summary>
        public class demo
        {
            private void dosomething()
            {
                SingletonProvider<TestClass>.Instance.Write();
            }
        }
    }
  • 相关阅读:
    常见cout格式输出
    P3332 [ZJOI2013]K大数查询
    pdb
    OS
    ubuntu su failure when password was right
    【opencv安裝】ubuntu16 opencv安装+测试
    shell脚本读取文件+读取命令行参数+读取标准输入+变量赋值+输出到文件
    xshell上传下载文件
    【sed / awk脚本编写】
    shell正则式解析身份证和手机号
  • 原文地址:https://www.cnblogs.com/BluceLee/p/8693198.html
Copyright © 2011-2022 走看看