【设计模式】——单例模式

【设计模式】——单例模式

码农世界 2024-05-24 前端 72 次浏览 0个评论

💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,设计模式、Python机器学习等

🥏主页链接:

                Y小夜-CSDN博客

目录

🎯模式动机与定义

🎯 模式结构与分析

🎯模式实例与解析

🎯模式效果与应用


🎯模式动机与定义

  • 模式定义
    • 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
  • 单例模式的要点有三个:
    • 某个类只能有一个实例
    • 必须自行创建这个实例
    • 必须自行向整个系统提供这个实例
  • 单例模式是一种对象创建型模式

🎯 模式结构与分析

单例设计模式分类两种:

  • 饿汉式:类加载就会导致该单实例对象被创建
  • 赖汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建

    饿汉式-方式1(静态变量方式)

            该方式在成员位置声明Singleton类型的静态变量,并创建Singleton类的对象instance。

    instancei对象是随着类的加载而创建的。如果该对象足够大的话,而一直没有使用就会造成内存的浪费。

    懒汉式-方式1(线程不安全)

            从上面代码我们可以看出该方式在成员位置声明singleton类型的静态变量,并没有进行对象的赋值操作,那么什么时候赋值的呢?当调用getInstance()方法获取sing1 leton类的对象的时候才创建Singleton类的对象,这样就实现了懒加载的效果。但是,如果是多线程环境,会出现线程安全问题。

🎯模式实例与解析

模式实例

打印池:实例说明

在操作系统中,打印池(Print Spooler)是一个用于管理打印任务的应用程序,通过打印池用户可以删除、中止或者改变打印任务的优先级,在一个系统中只允许运行一个打印池对象,如果重复创建打印池则抛出异常。现使用单例模式来模拟实现打印池的设计。

🎯模式效果与应用

 单例模式优点:

  • 提供了对唯一实例的受控访问
  • 可以节约系统资源,提高系统的性能
  • 允许可变数目的实例(多例类)

    单例模式缺点:

    • 扩展困难(缺少抽象层)
    • 单例类的职责过重
    • 由于自动垃圾回收机制,可能会导致共享的单例对象的状态丢失

       在以下情况下可以使用单例模式:

      • 系统只需要一个实例对象,或者因为资源消耗太大而只允许创建一个对象
      • 客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例

转载请注明来自码农世界,本文标题:《【设计模式】——单例模式》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,72人围观)参与讨论

还没有评论,来说两句吧...

Top