单例模式

作者: GL101 | 来源:发表于2021-03-10 16:24 被阅读0次
概念

一个类只有允许创建一个实例对象

为什么用单例
  1. 节省资源,对于一些频繁创建和销毁的对象使用单例更好。
  2. 处理资源访问冲突问题
  3. 表示全局唯一类,如果有些数据在系统中只需要一份,那就比较适合设计为单例,比如配置信息。
为什么不使用全局变量或者静态变量

单例模式支持懒加载,在使用的时候才会生成实例,更加节省资源

为什么要使用单例模式而不使用静态方法

静态方法和单例模式使用的场景不同,如果只是一个简单过程方法,不存在状态,可以使用静态方法,比如生成随机数,生成唯一ID。
但一些情况下需要状态管理,比如下载功能,需要管理进程管理,下载进度管理。

实现
  1. 构造方法设为private,避免外部能直接通过构造函数生成对象
  2. 考虑线程安全问题
  3. 单例类不允许被继承(final)
//swift
final class PrintHelper{
  static let `default` = PrintHelper()
    
   private PrintHelper(){}
    
   print(){}
}

实现方式分为两种:饿汉模式和懒汉模式
饿汉模式
加载就生成实例对象
优点:使用时不需要初始化对象,没有等待时间。
缺点:当对象大时,占用资源比较多。特别是在实例不是一开始就被使用。

//TypeScript
class PrintHelper{
     static instance = new PrintHelper();
     
    private constructor(){
        console.log("constructor");
    }
    print(){
    }
}
懒汉模式

使用时才加载。
优点:使用时才加载,不使用不占用资源
缺点:如果对象比较大,使用时初始化时间较长,等待时间比较长

//TypeScript
class PrintHelper{
    private static _instance:PrintHelper
     
    private constructor(){
        console.log("constructor");
    }
   static getInstance():PrintHelper{
        if(!PrintHelper._instance){
            PrintHelper._instance = new PrintHelper()
        }
        return PrintHelper._instance
    }
    print(){
    }
}
懒汉模式一定比饿汉模式好吗?

原则上是的,因为懒汉模式是用到才会对应的实例,不会在程序加载时就生成,这样节省内存。
如果生成对象耗时稍微长放在哪都会有较长时间,这时候不是考虑用懒汉模式还是饿汉模式,而是考虑怎么去优化。

单例的线程安全问题

在JavaScript(TS)中因为是单线程,不存在线程问题,所以可以不必考虑。但在支持多线程编程的语言中,要考虑线程安全问题。
务必保证在应用存活期间(一个进程中),只会生成一个实例对象。

单例模式的缺点
  1. 强耦合,直接在实例内部调用,隐藏了依赖关系
  2. 单例模式不利于使用多态、继承

相关文章

  • 【设计模式】单例模式

    单例模式 常用单例模式: 懒汉单例模式: 静态内部类单例模式: Android Application 中使用单例模式:

  • Android设计模式总结

    单例模式:饿汉单例模式://饿汉单例模式 懒汉单例模式: Double CheckLock(DCL)实现单例 Bu...

  • 2018-04-08php实战设计模式

    一、单例模式 单例模式是最经典的设计模式之一,到底什么是单例?单例模式适用场景是什么?单例模式如何设计?php中单...

  • 设计模式之单例模式详解

    设计模式之单例模式详解 单例模式写法大全,也许有你不知道的写法 导航 引言 什么是单例? 单例模式作用 单例模式的...

  • Telegram开源项目之单例模式

    NotificationCenter的单例模式 NotificationCenter的单例模式分析 这种单例模式是...

  • 单例模式Java篇

    单例设计模式- 饿汉式 单例设计模式 - 懒汉式 单例设计模式 - 懒汉式 - 多线程并发 单例设计模式 - 懒汉...

  • IOS单例模式的底层原理

    单例介绍 本文源码下载地址 1.什么是单例 说到单例首先要提到单例模式,因为单例模式是单例存在的目的 单例模式是一...

  • 单例

    iOS单例模式iOS之单例模式初探iOS单例详解

  • 单例模式

    单例模式1 单例模式2

  • java的单例模式

    饿汉单例模式 懒汉单例模式

网友评论

    本文标题:单例模式

    本文链接:https://www.haomeiwen.com/subject/jkiwqltx.html