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

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

🎯模式效果与应用

 单例模式优点:

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

单例模式缺点:

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

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

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

网站公告

今日签到

点亮在社区的每一天
去签到