首页 > 其他分享 >设计模式之单例模式

设计模式之单例模式

时间:2024-07-11 21:29:43浏览次数:13  
标签:Singleton getInstance 模式 instance 实例 static 单例 设计模式

简介

单例模式(Singleton Pattern)是一种设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这在某些情况下非常有用,比如需要一个唯一的配置管理器、日志记录器、或资源管理器。

单例模式的特点

  1. 唯一实例:类内部维护一个唯一实例,确保类的实例只有一个。
  2. 全局访问点:提供一个全局访问点,以便其他类可以通过这个访问点获取该实例。
  3. 延迟实例化:可以延迟创建实例,直到第一次使用时才进行实例化(懒汉模式)。

实现单例模式

饿汉模式

这种方法在类加载时就创建实例,比较简单,但如果实例占用资源较大而且在实际运行中未使用,会造成资源浪费。

class Singleton {
    private static instance: Singleton = new Singleton();
    private constructor() { }
    public static getInstance(): Singleton {
        return Singleton.instance;
    }
    public someMethod() {
        console.log('Singleton method called.');
    }
}
// 使用
const singleton = Singleton.getInstance();
singleton.someMethod();
懒汉模式

这种方法在第一次调用 getInstance 方法时才创建实例,适合需要延迟加载的情况。

class Singleton {
    private static instance: Singleton;
    private constructor() { }
    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }
        return Singleton.instance;
    }
    public someMethod() {
        console.log('Singleton method called.');
    }
}
// 使用
const singleton = Singleton.getInstance();
singleton.someMethod();
线程安全的懒汉模式

在多线程环境中,需要确保实例创建的线程安全性。

class Singleton {
    private static instance: Singleton;
    private static lock = new Object();
    private constructor() { }
    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            synchronized (Singleton.lock) {
                if (!Singleton.instance) {
                    Singleton.instance = new Singleton();
                }
            }
        }
        return Singleton.instance;
    }
    public someMethod() {
        console.log('Singleton method called.');
    }
}

// 使用
const singleton = Singleton.getInstance();
singleton.someMethod();

单例模式的优缺点

优点:

  • 控制实例数量:确保类只有一个实例,节省资源。
  • 全局访问:提供全局访问点,方便访问实例。
  • 延迟加载:可以实现延迟加载,减少不必要的资源消耗。

缺点:

  • 扩展性差:单例类难以扩展,尤其是在需要子类化的情况下。
  • 多线程问题:在多线程环境下,需要小心处理实例创建的线程安全问题。
  • 隐藏依赖:使用单例模式可能会隐藏类之间的依赖关系,使代码难以测试和维护。

标签:Singleton,getInstance,模式,instance,实例,static,单例,设计模式
From: https://blog.csdn.net/qq_47012987/article/details/140362483

相关文章

  • 【云原生技术】微服务模式如何建立负载均衡体系?
    微服务模式如何建立负载均衡体系?1.**选择适当的负载均衡策略**2.**使用服务注册与发现**3.**动态调整和监控**4.**使用反向代理和网关**5.**容错和弹性设计**示例)建立有效的负载均衡体系对于微服务架构至关重要,它可以确保各个微服务实例能够均衡地分担请求负......
  • 设计模式之职责链模式
    1.职责链模式(ChainofResponsibilityPattern)        在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完后再传递给C处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所......
  • 华贝甄选绿色积分模式的可信赖之处揭秘
        华贝甄选是天贝集团旗下的数字产融生态领先品牌,业务涵盖PPP产业、金融生态、国际投资、智慧能源、数字产业、智慧产业、三农产业、生物科技等领域。其优势在于通过多维系统助力DAO组织系统打造,实现财富与健康双丰收;打造全新生态体系,实现生态链条和生态联盟,线上线下......
  • 常见的设计模式-java实现
    设计模式的目的代码从重用性(相同的功能可以复用)代码的可读性(编程的规范性,便于其他人的阅读)可扩展性(程序添加新功能不会很困难)可靠性(添加新功能后对原有的功能没有影响)使程序高内聚低耦合七大设计原则1.单一职责原则介绍一个类应该只负责一个职责,降低类的耦合度。提高......
  • 海狐外卖O2O商城系统:技术架构与运营模式的深度解析
    摘要:本文深入探讨了海狐外卖O2O商城系统的技术架构、功能特性以及运营模式。海狐外卖作为一款专注于细分市场领域的外卖餐饮解决方案,不仅拥有先进的技术栈支持,还通过丰富的系统插件和灵活的运营模式,为商户和用户提供高效、便捷的服务。本文将从技术角度对其架构进行详细解析,并......
  • java设计模式--创建型模式
    一、设计原则1.1设计模式的目的编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序(软件),具有更好的1)代码重用性(即:相同功能的代码,不用多次编写)2)可读性(即:编程规范性,便于其他程序员的阅读和理解)......
  • 手写一个单例模式然后问如何破坏这个单例模式
    手写一个单例模式然后问如何破坏这个单例模式美团到店的原题,手写一个单例模式然后问如何破坏这个单例模式?单例模式谁都会,懒汉、饿汉、双重校验锁、匿名内部类、Enum,倒背如流了都,那如何破坏单例呢?以最简单的饿汉式写法为例:所谓单例,就是保证一个类只有一个实例对象,那想要破坏单......
  • Linux (10) 配置HAProxy,实现负载均衡器的主备模式
    《WindowsAzurePlatform系列文章目录》 最近有1个客户需求,在这里记录一下。客户提出需要使用Azure负载均衡器(四层负载均衡器),实现主备模式。场景是负载均衡器后有2台虚拟机-平时100%的流量都发送到第一台虚拟机-如果第一台虚拟机发生......
  • 设计模式使用场景实现示例及优缺点(创建型模式——单例模式、建造者模式、原型模式)
    创建型模式单例模式(SingletonPattern)单例模式(SingletonPattern)在Java中的使用场景与在其他编程语言中类似,其主要目的是确保一个类只有一个实例,并提供一个全局的访问点。以下是单例模式的一些常见使用场景及详细讲解:使用场景控制资源的使用:数据库连接池:数据库连接是......
  • 设计模式使用场景实现示例及优缺点(结构型模式——代理模式、外观模式)
    结构型模式代理模式(ProxyPattern)代理模式(ProxyPattern)是一种结构型设计模式,它通过引入一个代理对象来控制对另一个对象的访问。这个代理对象可以为被代理的对象提供额外的功能,例如访问控制、延迟初始化、日志记录、或网络访问等。适用场景远程代理:为一个对象在不同......