C#之单例模式

作用:保证一个类有且仅有一个实例(避免对象资源重复创建,造成资源浪费),并提供一个访问它的全局访问点。

单例模式一:构造函数私有化,双if+lock锁;

public sealed class SingleProfit
{
    //创建私有化静态obj锁
    private static readonly object _ObjLock = new object(); 
    //创建私有静态字段,接收类的实例化对象
    private static volatile SingleProfit _SingleProfit = null; //volatile 促进线程安全,保证线程有序执行 
    //构造函数私有化
    private SingleProfit(){}
    //创建单利对象资源并返回
    public static SingleProfit CreateSingleProfitObj()
    {
        if(_SingleProfit == null)
        {
            lock (_ObjLock)
            {
                if (_SingleProfit==null)
                {
                    _SingleProfit = new SingleProfit();
                }
            }
        }
        return _SingleProfit;
    }

    //多线程环境下测试
    public string Test()
    {
        return "SayHi,.NET Core!";
    }
}

单例模式二:构造函数私有化,静态构造函数初始化;

public sealed class SingleProfit
{
    //创建私有静态字段,接收类的实例化对象
    private static readonly SingleProfit _SingleProfit = null;  
    //构造函数私有化
    private SingleProfit() { }
    //静态构造函数,创建单利对象资源
    static SingleProfit()
    {
       _SingleProfit = new SingleProfit();
    }

    //获取单利对象资源
    public static SingleProfit CreateSingleProfitObj()
    {
       return _SingleProfit;
    }

    //多线程环境下测试
    public string Test()
    {
       return "SayHi,.NET Core!";
    }
}

类方法中调用:

string hi = SingleProfit.CreateSingleProfit().Test();

你可能感兴趣的:(C#之设计模式)