C# 单例模式

using System;

namespace Singleton
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(">>>>单例模式:饿汉式");
            Singleton1 one = Singleton1.getInstance();
            one.SayHi();

            Console.WriteLine(">>>>单例模式:双检锁");
            Singleton2 two = Singleton2.getInstance();
            two.SayHi();

            Console.ReadKey();
        }
    }
    public class Singleton1
    {
        private Singleton1() { }//私有构造函数,阻止从外部构造
        private static Singleton1 _obj = new Singleton1();//静态内部变量,加载时初始化
        public static Singleton1 getInstance() { return _obj; }//总是返回同一个实例
        public void SayHi() { Console.WriteLine("Hi! {0}", this); }
    }
    public class Singleton2
    {
        private Singleton2() { }//私有构造函数,阻止从外部构造
        private volatile static Singleton2 _obj;//多线程访问时无锁情况下要用volatile
        private static readonly object locker = new object();
        public static Singleton2 getInstance()
        {
            if (null == _obj)
            {//已创建时避免锁影响性能
                lock (locker)
                {//线程锁
                    if (null == _obj)
                    {
                        _obj = new Singleton2();
                    }
                }
            }
            return _obj;//总是返回同一个实例
        }
        public void SayHi() { Console.WriteLine("Hi! {0}", this); }
    }
}

你可能感兴趣的:(C#)