随笔 - 46  文章 - 36 评论 - 43 阅读 - 40357

设计模式——单例模式

 

需求

 

在各种应用环境中,应该能发现某些类在这样一点上与众不同:这个类在同一时刻只能有一个对象实例,不允许多个。像一个网站的访问计数器,只能是全局唯一实例,这就需要单例模式(Singleton Pattern)。

 

定义

  

 

单例模式就是确保一个类只有一个实例,并且该实例必须自动创建,并向整个系统提供该实例。

 

实现原理:(1)将构造函数定义成私有或者受保护,使得不能通过构造函数来创建对象;(2)定义一个静态的方法提供公共接口,用于访问维一的实例。

 

单例模式特征:(1)任何时刻单例类只能有一个实例;(2)单例类自己创建这个唯一的实例;(3)单例类必须给所有其他对象提供这个实例。

 

单例模式又可以分为饿汉式单例模式和懒汉式单例模式。饿汉式单例模式在类初始化时就已经创建了自身的对象实例;而懒汉式单例模式则是在需要使用的时候才创建自身的对象实例。

 

案例

 

    class Program

    {

        static voidMain(string[] args)

        {

            // 客户程序

            ChairmanSingleton theChairman = ChairmanSingleton.Instance;

            LogManagerSingleton theLogManager = LogManagerSingleton.Instance;

        }

    }

 

    // 懒汉式单例模式编写示例:主席类

    public class ChairmanSingleton

    {

        protected ChairmanSingleton()    // 私有或者保护构造函数

        { }

 

        private static ChairmanSingleton _Instance;

        public static ChairmanSingleton Instance

        {

            get

            {

                if (_Instance == null) _Instance = new ChairmanSingleton();

                return _Instance;

            }

        }

    }

 

    // 饿汉式单例模式编写示例:日志管理器类

    public class LogManagerSingleton

    {

        private LogManagerSingleton()    // 私有或者保护构造函数

        { }

 

        private static LogManagerSingleton _Instance = new LogManagerSingleton();

        public static LogManagerSingleton Instance { get { return _Instance; } }

    }

 

优缺点

 

优点:在单例模式中,客户调用类的实例时,只能调用一个公共的接口,这就为整个系统开发提供了一个共享的概念。

 

缺点:(1)实现单例模式的类在实例化后,不能被别的类继承,因为使用了静态成员与静态接口;(2)在分布式系统中,当系统中的单例类被复制到多个虚拟机下时,在每一个虚拟机下都会创建一个实例对象,违反了单例模式的初衷,此时如果想知道具体那个虚拟机下运行着那个单例对象是很困难得;(3)单例类很难实现序列化。

 

posted on   萨迦狐  阅读(212)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示