【转载】.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

猜你喜欢

转载自www.cnblogs.com/lianjinzhe/p/10322854.html
今日推荐