极速理解设计模式系列:5.单例模式(Singleton Pattern)

单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

三要点

       一、单例类只能有一个实例

       二、单例类必须自行创建自身实例

       三、单例类自行向整个系统提供实例

类图

 

 

应用场景:在整个系统中只需要一个类实例的全局可用类。比如License验证,内存管理等。

分析:其内部有很多需要提供全局访问的方法,对于C#中单例模式有两种创建:双检索单例、饿汉单例。

下面我们在控制台程序中演示如何创建者两种单例模式:

双检索单例

复制代码
 //双检锁的单例模式
    public class License
    {
        private static License instance ;
        private static object _lock = new object();
        private License() { }
        public static License GetInstance()
        {
            if (instance == null)
            {
                lock (_lock)
                {
                    if (instance == null)
                    {
                        instance = new License();
                    }
                }
            }
            return instance;
        }
        public void CheckLicense(int code)
        {
            if (code == 20110925)
                Console.WriteLine("通过了License验证");
            else
                Console.WriteLine("没有通过License验证"); 
        }
    }

复制代码

饿汉单例

复制代码
    //饿汉单例模式
    public class GcManager
    {
        public static readonly GcManager instance = new GcManager();
        private GcManager() { }
        public void FreeMemory()
        {
            GC.Collect();
            Console.WriteLine("开始释放内存!");
        }
        public void FreeObject()
        {
            Console.WriteLine("开始释放对象!");
        }
    }

复制代码

客户端应用

复制代码
    class Program
    {
        static void Main(string[] args)
        {
            //
            License.GetInstance().CheckLicense(20110925);
            
            GcManager.instance.FreeMemory();
            GcManager.instance.FreeObject();

            Console.ReadLine();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值