单例模式概述

举报
赵KK日常技术记录 发表于 2023/06/30 18:24:54 2023/06/30
1k+ 0 0
【摘要】 单例模式概述单例模式是一种创建型设计模式,它保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。单例模式可以分为懒加载单例模式和饿汉式单例模式。懒加载单例模式是指在第一次使用时才创建实例,之后的使用直接返回已有的实例。这种模式的优点是减少了内存占用,缺点是在第一次调用时可能会延迟。饿汉式单例模式是指在类加载时就创建实例,之后的使用直接返回已有的实例。这种模式的优点是调用速度快,缺点是...

单例模式概述

单例模式是一种创建型设计模式,它保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。单例模式可以分为懒加载单例模式和饿汉式单例模式。
懒加载单例模式是指在第一次使用时才创建实例,之后的使用直接返回已有的实例。这种模式的优点是减少了内存占用,缺点是在第一次调用时可能会延迟。
饿汉式单例模式是指在类加载时就创建实例,之后的使用直接返回已有的实例。这种模式的优点是调用速度快,缺点是占用内存较大。

单例模式的应用场景

  1. 共享资源:某些应用程序需要共享一些资源,如数据库连接、文件句柄等。使用单例模式可以确保这些资源在整个应用程序的生命周期内只有一个实例,从而避免资源竞争和重复占用。
  2. 配置信息:应用程序需要在运行时加载一些配置信息,如日志级别、缓存配置等。这些配置信息通常只有一个实例,可以使用单例模式来确保全局唯一。
  3. 工具类:很多工具类在应用程序中只需要一个实例,如日期工具类、字符串工具类等。使用单例模式可以避免重复创建实例,提高应用程序的性能。
  4. 工厂方法:在某些场景下,我们需要根据特定条件创建不同类型的实例。使用单例模式可以确保这些实例在整个应用程序的生命周期内只有一个实例,从而避免重复创建。
  5. 应用程序入口:某些应用程序需要一个全局的入口点,如 Web 应用程序的入口、游戏应用程序的启动器等。使用单例模式可以确保只有一个入口点,方便用户访问。

单例模式的实现

下面以 Python 语言为例,分别介绍懒加载单例模式和饿汉式单例模式的实现。

懒加载单例模式

class Singleton:  
   _instance = None
   def __new__(cls, *args, **kwargs):  
       if not cls._instance:  
           cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)  
       return cls._instance
   def __init__(self):  
       pass  

饿汉式单例模式

class Singleton:  
   _instance = None
   def __init__(self):  
       pass
   def __new__(cls, *args, **kwargs):  
       if not cls._instance:  
           cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)  
       return cls._instance  

这两种实现方式都可以保证单例模式的基本要求。懒加载单例模式在第一次调用时会延迟创建实例,之后的调用直接返回已有的实例;而饿汉式单例模式在类加载时就创建实例,之后的调用直接返回已有的实例。

总结

单例模式是一种创建型设计模式,它确保一个类仅有一个实例,并提供一个访问该实例的全局访问点。单例模式适用于共享资源、配置信息、工具类、工厂方法、应用程序入口等场景。通过懒加载单例模式和饿汉式单例模式的实现,可以满足不同的应用需求。在实际开发中,应根据具体场景选择合适的单例模式实现。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。