zoukankan      html  css  js  c++  java
  • 【转载】.net 单例模式的4种实现方式

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

    原文地址:  https://www.cnblogs.com/dreign/archive/2012/05/08/2490212.html

  • 相关阅读:
    linux卸载mysql
    【Linux/Oracle】ORA-00031:标记要终止的会话 解决
    linux上 oracle数据库的密码过期-解决
    SYSTEM表空间满,解决方法
    Oracle 撤回已经提交的事务
    关于MySQL取不到数据
    解决mysql只能通过localhost而不能使用本机ip访问的问题
    linux 卸载php,史上最详情
    关于支付宝免密代扣申请(全),小程序,公众号,php
    mcrypt_module_open 微信小程序 php7不能使用的问题
  • 原文地址:https://www.cnblogs.com/lianjinzhe/p/10322854.html
Copyright © 2011-2022 走看看