亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
1. Factory Pattern(工廠模式)
使用場(chǎng)景:
示例代碼:
2. Singleton Pattern(單例模式)
實(shí)現(xiàn)方式:
3. Observer Pattern(觀察者模式)
總結(jié)對(duì)比
首頁(yè) web前端 js教程 JavaScript設(shè)計(jì)模式:工廠,Singleton和Observer

JavaScript設(shè)計(jì)模式:工廠,Singleton和Observer

Jul 29, 2025 am 01:39 AM
設(shè)計(jì)模式

Factory模式用於創(chuàng)建對(duì)象而不暴露構(gòu)造邏輯,通過統(tǒng)一接口生成不同類型對(duì)象,適用於創(chuàng)建多種相似類型對(duì)象的場(chǎng)景;2. Singleton模式確保一個(gè)類僅有一個(gè)實(shí)例並提供全局訪問點(diǎn),常用於配置管理、日誌器等需要單一狀態(tài)的場(chǎng)景;3. Observer模式建立一對(duì)多依賴關(guān)係,當(dāng)主體狀態(tài)變化時(shí)自動(dòng)通知所有觀察者,廣泛應(yīng)用於事件系統(tǒng)和數(shù)據(jù)綁定。這三種模式分別解決了對(duì)象創(chuàng)建、實(shí)例唯一性和狀態(tài)響應(yīng)的問題,結(jié)合使用可提升代碼的模塊化、可維護(hù)性和可擴(kuò)展性。

JavaScript Design Patterns: Factory, Singleton, and Observer

JavaScript 設(shè)計(jì)模式中的FactorySingletonObserver是三種非常實(shí)用且常見的模式,能幫助我們寫出更模塊化、可維護(hù)和可擴(kuò)展的代碼。下面分別介紹它們的用途、實(shí)現(xiàn)方式和使用場(chǎng)景。

JavaScript Design Patterns: Factory, Singleton, and Observer

1. Factory Pattern(工廠模式)

工廠模式用於創(chuàng)建對(duì)象,而無需暴露具體的構(gòu)造邏輯。它通過一個(gè)統(tǒng)一的接口來生成不同類型的對(duì)象,特別適合對(duì)象創(chuàng)建邏輯複雜或需要根據(jù)條件動(dòng)態(tài)決定類型的情況。

使用場(chǎng)景:

  • 創(chuàng)建多種相似類型的對(duì)象(如不同類型的用戶、UI 組件等)
  • 避免重複的new操作和條件判斷分散在代碼各處

示例代碼:

 class Dog {
  speak() {
    return "Woof!";
  }
}

class Cat {
  speak() {
    return "Meow!";
  }
}

class AnimalFactory {
  createAnimal(type) {
    if (type === "dog") {
      return new Dog();
    } else if (type === "cat") {
      return new Cat();
    }
    throw new Error("Unknown animal type");
  }
}

// 使用const factory = new AnimalFactory();
const dog = factory.createAnimal("dog");
const cat = factory.createAnimal("cat");

console.log(dog.speak()); // Woof!
console.log(cat.speak()); // Meow!

?優(yōu)點(diǎn):解耦對(duì)象創(chuàng)建與使用,易於擴(kuò)展新類型。

JavaScript Design Patterns: Factory, Singleton, and Observer

2. Singleton Pattern(單例模式)

單例模式確保一個(gè)類只有一個(gè)實(shí)例,並提供一個(gè)全局訪問點(diǎn)。在JavaScript 中,由於對(duì)像是引用類型,實(shí)現(xiàn)單例相對(duì)簡(jiǎn)單。

使用場(chǎng)景:

  • 全局配置管理
  • 日誌記錄器(Logger)
  • 數(shù)據(jù)庫(kù)連接池
  • 狀態(tài)管理(如Redux store 本質(zhì)也是單例)

實(shí)現(xiàn)方式:

 class Database {
  constructor() {
    if (Database.instance) {
      return Database.instance;
    }
    this.url = "localhost:3000";
    Database.instance = this;
    return this;
  }

  connect() {
    console.log("Connected to DB at " this.url);
  }
}

// 使用const db1 = new Database();
const db2 = new Database();

console.log(db1 === db2); // true

?? 注意:構(gòu)造函數(shù)中判斷是否已存在實(shí)例,如果存在就返回已有實(shí)例,避免重複創(chuàng)建。

JavaScript Design Patterns: Factory, Singleton, and Observer

?優(yōu)點(diǎn):節(jié)約資源,保證全局狀態(tài)一致。

?注意:過度使用可能導(dǎo)致代碼難以測(cè)試或耦合度高。


3. Observer Pattern(觀察者模式)

觀察者模式定義了一種一對(duì)多的依賴關(guān)係,當(dāng)一個(gè)對(duì)象狀態(tài)改變時(shí),所有依賴它的對(duì)像都會(huì)自動(dòng)收到通知。它是事件系統(tǒng)和響應(yīng)式編程的基礎(chǔ)。

使用場(chǎng)景:

  • 事件監(jiān)聽機(jī)制(如DOM 事件)
  • 數(shù)據(jù)綁定(如Vue 的響應(yīng)式原理)
  • 狀態(tài)管理中的訂閱更新

示例代碼:

 class Subject {
  constructor() {
    this.observers = [];
  }

  subscribe(observer) {
    this.observers.push(observer);
  }

  unsubscribe(observer) {
    this.observers = this.observers.filter(obs => obs !== observer);
  }

  notify(data) {
    this.observers.forEach(observer => observer.update(data));
  }
}

class Observer {
  constructor(name) {
    this.name = name;
  }

  update(data) {
    console.log(`${this.name} received:`, data);
  }
}

// 使用const subject = new Subject();

const observer1 = new Observer("Alice");
const observer2 = new Observer("Bob");

subject.subscribe(observer1);
subject.subscribe(observer2);

subject.notify("New message!"); 
// Alice received: New message!
// Bob received: New message!

subject.unsubscribe(observer1);
subject.notify("Second message!");
// Bob received: Second message!

?優(yōu)點(diǎn):松耦合,支持動(dòng)態(tài)訂閱/取消,適合異步通信。

? 小技巧:現(xiàn)代JS 中可以用EventTarget或發(fā)布/訂閱(Pub/Sub)模式簡(jiǎn)化實(shí)現(xiàn)。


總結(jié)對(duì)比

模式 用途 核心思想
Factory 創(chuàng)建對(duì)象 封裝創(chuàng)建邏輯,統(tǒng)一接口
Singleton 保證唯一實(shí)例 全局訪問僅一個(gè)實(shí)例
Observer 狀態(tài)變化通知依賴者 發(fā)布-訂閱,自動(dòng)更新

這三種模式在實(shí)際項(xiàng)目中經(jīng)常結(jié)合使用。比如:

  • Singleton管理全局狀態(tài)
  • Observer監(jiān)聽狀態(tài)變化並刷新UI
  • Factory動(dòng)態(tài)創(chuàng)建組件或服務(wù)

基本上就這些。掌握它們,能讓你的JavaScript 架構(gòu)更清晰,也更容易應(yīng)對(duì)複雜業(yè)務(wù)邏輯。

以上是JavaScript設(shè)計(jì)模式:工廠,Singleton和Observer的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
Java框架中設(shè)計(jì)模式與架構(gòu)模式的區(qū)別 Java框架中設(shè)計(jì)模式與架構(gòu)模式的區(qū)別 Jun 02, 2024 pm 12:59 PM

在Java框架中,設(shè)計(jì)模式和架構(gòu)模式的區(qū)別在於:設(shè)計(jì)模式定義了在軟體設(shè)計(jì)中解決常見問題的抽象解決方案,專注於類別和物件之間的交互,例如工廠模式。架構(gòu)模式定義了系統(tǒng)結(jié)構(gòu)和模組之間的關(guān)係,關(guān)注系統(tǒng)元件的組織和交互,如分層架構(gòu)。

PHP設(shè)計(jì)模式:測(cè)試驅(qū)動(dòng)開發(fā)實(shí)踐 PHP設(shè)計(jì)模式:測(cè)試驅(qū)動(dòng)開發(fā)實(shí)踐 Jun 03, 2024 pm 02:14 PM

TDD用於編寫高品質(zhì)PHP程式碼,步驟包括:編寫測(cè)試案例,描述預(yù)期功能並使其失敗。編寫程式碼,僅使測(cè)試案例通過,無需過度優(yōu)化或詳細(xì)設(shè)計(jì)。測(cè)試案例通過後,優(yōu)化和重構(gòu)程式碼以提高可讀性、可維護(hù)性和可擴(kuò)展性。

Guice框架中設(shè)計(jì)模式的應(yīng)用 Guice框架中設(shè)計(jì)模式的應(yīng)用 Jun 02, 2024 pm 10:49 PM

Guice框架應(yīng)用了多項(xiàng)設(shè)計(jì)模式,包括:?jiǎn)卫J剑和高^@Singleton註解確保類別只有一個(gè)實(shí)例。工廠方法模式:透過@Provides註解建立工廠方法,在依賴注入時(shí)取得物件實(shí)例。策略模式:將演算法封裝成不同策略類,透過@Named註解指定具體策略。

Java設(shè)計(jì)模式之裝飾器模式剖析 Java設(shè)計(jì)模式之裝飾器模式剖析 May 09, 2024 pm 03:12 PM

裝飾器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,允許動(dòng)態(tài)添加物件功能,無需修改原始類別。它透過抽象組件、具體組件、抽象裝飾器和具體裝飾器的協(xié)作實(shí)現(xiàn),可以靈活擴(kuò)展類別功能,滿足變化的需求。範(fàn)例中,將牛奶和摩卡裝飾器添加到Espresso,總價(jià)為2.29美元,展示了裝飾器模式在動(dòng)態(tài)修改物件行為方面的強(qiáng)大功能。

Spring MVC架構(gòu)中設(shè)計(jì)模式的應(yīng)用 Spring MVC架構(gòu)中設(shè)計(jì)模式的應(yīng)用 Jun 02, 2024 am 10:35 AM

SpringMVC框架使用以下設(shè)計(jì)模式:1.單例模式:管理Spring容器;2.門面模式:協(xié)調(diào)控制器、視圖和模型互動(dòng);3.策略模式:根據(jù)請(qǐng)求選擇請(qǐng)求處理程序;4.觀察者模式:發(fā)布和監(jiān)聽?wèi)?yīng)用程式事件。這些設(shè)計(jì)模式增強(qiáng)了SpringMVC的功能和靈活性,使開發(fā)者可以創(chuàng)建高效、可維護(hù)的應(yīng)用程式。

java框架中使用設(shè)計(jì)模式的優(yōu)缺點(diǎn)有哪些? java框架中使用設(shè)計(jì)模式的優(yōu)缺點(diǎn)有哪些? Jun 01, 2024 pm 02:13 PM

Java框架中使用設(shè)計(jì)模式的優(yōu)點(diǎn)包括:程式碼可讀性、可維護(hù)性和可擴(kuò)充性增強(qiáng)。缺點(diǎn)包括:過度使用導(dǎo)致複雜性、效能開銷以及學(xué)習(xí)曲線陡峭。實(shí)戰(zhàn)案例:代理模式用於延遲載入物件。明智地使用設(shè)計(jì)模式可充分利用其優(yōu)勢(shì)並最小化缺點(diǎn)。

PHP設(shè)計(jì)模式:用於解決特定軟體問題的模式 PHP設(shè)計(jì)模式:用於解決特定軟體問題的模式 Jun 01, 2024 am 11:07 AM

PHP設(shè)計(jì)模式提供了已知解決方案來應(yīng)對(duì)軟體開發(fā)中常見的問題。常見的模式類型包括創(chuàng)建型(例如工廠方法模式)、結(jié)構(gòu)型(例如裝飾器模式)和行為型(例如觀察者模式)。設(shè)計(jì)模式在解決重複性問題、提高可維護(hù)性和促進(jìn)團(tuán)隊(duì)合作時(shí)特別有用。在電商系統(tǒng)中,觀察者模式可以實(shí)現(xiàn)購(gòu)物車與訂單狀態(tài)之間的自動(dòng)更新。整體而言,PHP設(shè)計(jì)模式是創(chuàng)建健壯、可擴(kuò)展且可維護(hù)應(yīng)用程式的重要工具。

設(shè)計(jì)模式與測(cè)試驅(qū)動(dòng)開發(fā)的關(guān)係 設(shè)計(jì)模式與測(cè)試驅(qū)動(dòng)開發(fā)的關(guān)係 May 09, 2024 pm 04:03 PM

TDD與設(shè)計(jì)模式可提高程式碼品質(zhì)和可維護(hù)性。 TDD確保測(cè)試覆蓋率,提高可維護(hù)性,並提高程式碼品質(zhì)。設(shè)計(jì)模式透過鬆散耦合和高內(nèi)聚等原則協(xié)助TDD,確保測(cè)試涵蓋應(yīng)用程式行為的各個(gè)方面。它還透過可重用性,可維護(hù)性和更健壯的程式碼可提高可維護(hù)性和程式碼品質(zhì)。

See all articles