using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace 单例模式

{

    /// <summary>

    /// 单例模式作用产生唯一对象

单例类只能有一个实例。

单例类必须自己创建自己的唯一实例。

单例类必须给所有其它对象提供这一实例。

应用:

每台计算机可以有若干个打印机,但只能有一个Printer Spooler,避免两个打印作业同时输出到打印机。

一个具有自动编号主键的表可以有多个用户同时使用,但数据库中只能有一个地方分配下一个主键编号。否则会出现主键重复。

    /// </summary>

    class Program

    {

        static void Main(string[] args)

        {

            //饿汉式

            Penson p = Penson.GetPenson();

            //懒汉式

            Animus animus = Animus.GetAnimus();

        }

    }

    class Penson

    {

        /// <summary>

        /// 单例模式之饿汉式

        /// </summary>

        //第一步设置私有的构造函数

        private Penson()

        { }

        //第二步:设置全局唯一变量

        private static Penson _penson = new Penson();

        //第三步:写返回值为Penson类型的函数

        public static Penson GetPenson()

        {

            return _penson;

        }

    }

    class Animus

    {

        /// <summary>

        /// 单例模式之懒汉式

        /// </summary>

        private Animus() { }

        private static Animus _animus = null;

        public static Animus GetAnimus()

        {

            if (_animus == null)

            {

                _animus = new Animus();

            }

            return _animus;

        }

    }

}