首頁 >web前端 >js教程 >單例還是可觀察?錯誤的選擇可能會讓您失去晉升機會!

單例還是可觀察?錯誤的選擇可能會讓您失去晉升機會!

DDD
DDD原創
2025-01-11 06:10:43756瀏覽

設計模式是創建結構良好且易於維護的軟體的基礎。其中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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn