首页 > web前端 > js教程 > 单例还是可观察?错误的选择可能会让您失去晋升机会!

单例还是可观察?错误的选择可能会让您失去晋升机会!

DDD
发布: 2025-01-11 06:10:43
原创
794 人浏览过

设计模式是创建结构良好且易于维护的软件的基础。其中SingletonObservable常用于需要全局状态控制以及系统不同部分之间通信的场景。在本文中,我们将探讨这两个标准如何工作、何时使用它们、它们的差异,并提供如何实施它们的实际示例。

什么是单例?

单例模式是一种创建型设计模式,可确保一个类只有一个实例并提供对该实例的全局访问点。当您需要跨整个应用程序使用单个对象(例如全局设置、数据库连接或日志管理)时,此模式非常有用。

单例是如何工作的?

Singleton的主要特点是它将类实例限制为单个对象,确保所有实例请求返回相同的对象。为了实现这一点,该模式通常使用静态方法,仅在第一次请求时创建实例,保证整个系统中对象的唯一创建和使用。

在下图中,序列显示了如何创建和访问 Singleton 实例,以确保它是唯一的。

Singleton ou Observable? A Escolha Errada Pode Custar Sua Promoção!

Singleton 序列图说明了客户端和 Singleton 类之间的交互流程。该过程从客户端调用静态 getInstance() 方法开始获取 Singleton 实例。如果尚未创建实例,Singleton 会创建一个新实例并返回它。当客户端再次调用 getInstance() 方法时,会返回同一个实例,确保整个程序执行过程中只有一个 Singleton 对象实例。

使用示例 - TypeScript 中的单例

class Singleton {
    private static instance: Singleton;

    private constructor() { }

    // Método para acessar a instância única
    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }
        return Singleton.instance;
    }

    public showMessage(): string {
        return "Esta é a única instância!";
    }
}

// Uso do Singleton
const instance1 = Singleton.getInstance();
console.log(instance1.showMessage()); // "Esta é a única instância!"
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true
登录后复制
登录后复制

何时使用单例?

  • 全局设置:当您需要单个实例来存储系统设置,例如环境变量时。
  • 连接管理:例如,管理与数据库或API服务器的连接。
  • 资源管理:当需要控制对独特资源(例如记录器或缓存)的访问时。

什么是可观察的?

可观察模式是一种行为设计模式,定义对象之间的一对多依赖关系。换句话说,当一个对象(“主体”)的状态发生变化时,它的所有依赖者(“观察者”)都会自动得到通知。此模式广泛用于需要在不同组件之间传播事件和状态更改的系统,例如图形界面或监控系统。

可观察是如何工作的?

可观察模式允许对象“观察”对象状态的变化并对这些变化做出反应。该模式基于三个主要组件:

  1. Subject:维护状态并向观察者发送通知的对象。
  2. 观察者:对Subject的状态变化感兴趣的对象。
  3. 订阅:一种允许观察者订阅或取消订阅主题通知的机制。

Singleton ou Observable? A Escolha Errada Pode Custar Sua Promoção!

Observable 序列图演示了该模式如何与多个观察者一起工作。当状态发生变化时,主体(或被观察对象)通知所有注册的观察者。每个观察者都会对通知做出反应,根据收到的信息采取必要的操作。通知过程被传播,以便所有观察者同时更新,使它们与主题的状态保持同步。当系统中有多个组件或部分需要了解对象状态的变化时,此模式非常有用。

用法示例 - TypeScript 中的 Observable

class Singleton {
    private static instance: Singleton;

    private constructor() { }

    // Método para acessar a instância única
    public static getInstance(): Singleton {
        if (!Singleton.instance) {
            Singleton.instance = new Singleton();
        }
        return Singleton.instance;
    }

    public showMessage(): string {
        return "Esta é a única instância!";
    }
}

// Uso do Singleton
const instance1 = Singleton.getInstance();
console.log(instance1.showMessage()); // "Esta é a única instância!"
const instance2 = Singleton.getInstance();
console.log(instance1 === instance2); // true
登录后复制
登录后复制

何时使用可观察的?

  • 图形界面中的事件:对按钮点击、字段更改或屏幕更新做出反应。
  • 状态更改通知:当需要向多个组件通知某个对象的更改时。
  • 反应式数据流建模:在多个系统之间存在数据或事件传播的系统中,例如基于事件的应用程序。

Singleton 和 Observable 之间的区别

虽然这两种模式都以受控方式管理对象,但它们的目的和行为却非常不同:

功能
Característica Singleton Observable
Objetivo Garantir que uma classe tenha apenas uma instância. Notificar múltiplos objetos sobre mudanças de estado.
Instância Apenas uma instância é criada e compartilhada. Vários objetos podem ser observadores de um único sujeito.
Uso principal Gerenciamento de recursos exclusivos. Notificação de eventos e mudanças de estado.
Exemplo de uso Gerenciamento de logs ou configuração global. Atualização de interfaces gráficas ou propagação de eventos.
单例

可观察

标题>

目标

确保一个类只有一个实例。 通知多个对象有关状态更改的信息。 实例 仅创建和共享一个实例。 多个对象可以是单个主体的观察者。 主要用途 专属资源管理。 事件和状态更改的通知。 使用示例 日志管理或全局配置。 更新图形界面或传播事件。 表> 结论

SingletonObservable

模式在软件开发的多种情况下都是基础模式。当我们需要保证整个应用程序中的类的单个实例时,
Singleton 是理想的选择,而 Observable 对于基于状态更改通知和管理多个对象之间的交互非常有用。 在这些模式之间进行选择时,请考虑您的项目的需求。当实例的唯一性对应用程序至关重要时,请使用 Singleton;当您的系统需要对状态或事件的变化做出反应时,请使用 Observable。

以上是单例还是可观察?错误的选择可能会让您失去晋升机会!的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板