设计模式系列一:单例模式

本文介绍单例模式的基本概念,通过C#代码示例展示了如何确保一个类只有一个实例,并提供了全局访问点。讨论了单例模式的优点及在多线程环境下使用加锁技术的开销。

单例模式
主要用于保证一个类只有一个实例,对外提供一个全局的访问点来获取该实例。是所有设计模式中最简单的模式。
这里写图片描述
实现代码(c#)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Singleton
{
    /// <summary>
    /// 功能描述:单例模式示例
    /// 优点:对外保证提供唯一实例
    /// 缺点:获取实例时需要花销时间,采用加锁技术,在多线程访问时花费的时间较多
    /// </summary>
    class Singleton
    {
        //存放本类私有对象
        private static Singleton m_SingletonInstance;
        //线程锁
        private static readonly object m_myLock=new object();

        /// <summary>
        /// 私有构造函数
        /// 阻止类的外部创建本类实例
        /// </summary>
        private Singleton()
        {

        }

        /// <summary>
        /// 返回本类唯一实例
        /// 添加多线程防护
        /// </summary>
        /// <returns>本类实例</returns>
        public static Singleton GetInstance()
        {
            if(m_SingletonInstance==null)//先判断实例是否存在
            {
                lock (m_myLock)//加锁,防护多线程访问
                {
                    if (m_SingletonInstance == null)//防止创建多个实例
                    {
                        m_SingletonInstance = new Singleton();//创建实例
                    }
                }
            }
            return m_SingletonInstance;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值