zoukankan      html  css  js  c++  java
  • 01.05 单例模式

    设计模式——单例模式

    需求

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

  • 相关阅读:
    vs2010 setup 打包 安装 BAT批处理实现自动安装软件功能
    为什么我上传了flv或MP4文件到服务器,可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢
    异步编程:(TAP)基于任务的异步编程模型详解
    异步编程:IAsyncResult异步编程模型 (APM)
    WCF:调用方未由服务器进行身份验证
    django 操作数据库--orm(object relation mapping)---models
    python操作memcached以及分布式
    网络干货,无论是运维还是开发都要知道的网络知识系列之(七)
    一次完整的HTTP事务是怎样一个过程?
    网络干货,无论是运维还是开发都要知道的网络知识系列之(六)
  • 原文地址:https://www.cnblogs.com/sagahu/p/2711158.html
Copyright © 2011-2022 走看看