unity游戏开发-C#语言基础篇(单例模式及双重加锁)

  class Program
    {
        static void Main(string[] args)
        {

            普通实例化对象
            Auto auto = new Auto("别克");
            Auto auto = new Auto("大众");

            单例模式
            AutoClass auto = AutoClass.GetAuto();
            auto.Run();
             Auto.GetAuto();

            //单例模式-练习
         
         Hero hero=Hero.GetHero();
            Console.ReadKey();
        }
    }
    class Hero
    {
        private static Hero hero;

        private Hero() { }

        public static Hero GetHero() {

            if (hero==null)
            {
                hero = new Hero();
            }

            return hero;
        
        }
    }
  class Auto
    {



         private string name;

        //public Auto(string _name) {
        //    name = _name;

        //}


        private static Auto auto;//第一 :声明自己类型的模板,用来保存自身的实例化对象 静态的
        private  static readonly object  obj = new object();


        //私有构造函数
        private Auto() {}

        public static Auto GetAuto()
        {//第二:利用一个静态方法对外部返回自身的实例对象 new一次 只能实例化一次

            if (auto == null)//判断自身的实例化对象是否为空,为空就实例化自身
            {
                auto = new Auto();
            }
            //否则就返回一实例化的自身 只能实例化一次;
            return autoClass;
        }


        //双重加锁
        public static Auto GetAuto() {
            if (auto == null)
            {
                lock(obj){
                if (auto == null)
                {
                    auto = new Auto();
                }
                }
            }
           return auto;    
        }













        private static Auto auto;

        private Auto()
        {

        }

        public static Auto GetAuto()
        {
            if (auto == null)
            {
                auto = new Auto();
            }


            return auto;
        }
    }

你可能感兴趣的:(unity游戏开发-C#语言基础篇(单例模式及双重加锁))