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();
            }
        }
    }
  • 相关阅读:
    [转]Asp.net中基于Forms验证的角色验证授权
    [转]npm常用命令
    [转]utf8编码引起js输出中文乱码的解决办法
    LEFT JOIN 和 RIGHT JOIN 运算
    [转].NET 数字格式化:忽略末尾零
    [译]Pro ASP.NET MVC 3 Framework 3rd Edition 目录及说明
    微信授权登录
    百度快照更新慢怎么办
    linux爱好者必须掌握的命令,linux基础命令集合
    input输入框只能输入数字、字母相关组合(正则表达式)
  • 原文地址:https://www.cnblogs.com/BluceLee/p/8693198.html
Copyright © 2011-2022 走看看