C# 设计模式一:【单例】

简介:单例

  • 一个类有且仅有一个实例

  • 提供一个唯一实例的全局访问接口

单例模式确保某一个类只有一个实例,向整个系统提供这个实例。 也就是一个应用程序中只被实例化一次,这样可以很大程度的节省系统的开销。

 

下面提供几份常见的编程方式,它们的区别在于,什么时候进行实例化。

程序运行调用实例化

    /// <summary>
    /// sealed 不能被继承,防止派生该类
    /// </summary>
    public sealed class SingleBegin
    {
        /// <summary>
        /// 程序运行调用实例化
        /// </summary>
        private static SingleBegin g_inst = new SingleBegin();

        /// <summary>
        /// private 私有,防止被人手动实例化
        /// </summary>
        private SingleBegin()
        {

        }

        /// <summary>
        /// 提供全局唯一单例调用接口
        /// </summary>
        public static SingleBegin Inst
        {
            get { return g_inst; }
        } 

        public void Display()
        {
            Console.WriteLine("程序运行即刻实例化 SingleBegin");
        }
     }

 

在静态构造函数中实例化(这只能算半个,因为可以被多次实例化)

    /// <summary>
    /// sealed 不能被继承,防止派生该类
    /// </summary>
    public sealed class SingleBegin
    {
        private static SingleBegin g_inst = null;

        /// <summary>
        /// 会被再次实例化,所以这个算半个
        /// </summary>
        static SingleBegin()
        {
            /// <summary>
            /// 使用时调用实例化
            /// </summary>
            g_inst = new SingleBegin();
        }

        /// <summary>
        /// 提供全局唯一单例调用接口
        /// </summary>
        public static SingleBegin Inst
        {
            get { return g_inst; }
        } 

        public void Display()
        {
            Console.WriteLine("程序运行即刻实例化 SingleBegin");
        }
    }

 

调用单例Inst时实例化(推荐用这种)

    /// <summary>
    /// sealed 不能被继承,防止派生该类
    /// </summary>
    public sealed class SingleWorld 
    {
        private static SingleWorld g_inst = null;

        /// <summary>
        /// private 私有,防止被人手动实例化
        /// </summary>
        private SingleWorld()
        {

        }

        /// <summary>
        /// 提供全局唯一单例调用接口
        /// </summary>
        public static SingleWorld Inst
        {
            get
            {
                if (null == g_inst)
                {
                    // 调用时实例化
                    g_inst = new SingleWorld();
                }

                return g_inst;
            }
        }

        public void Display()
        {
            Console.WriteLine("普通单例 SingleWorld");
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值