有哪些開發者模式?

1、單例開發模式(Singleton Pattern)

單例模式是一種創建型設計模式,目的是確保在程序運行期間,某個類只有一個實例,并提供一個全局訪問點來訪問該實例。


核心特點

  1. 唯一實例:一個類只能創建一個對象實例。
  2. 全局訪問:通過一個靜態方法或變量來訪問該實例。
  3. 延遲初始化:實例通常在第一次使用時才會被創建(懶加載)。
class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;}showMessage() {console.log("This is a singleton!");}
}const instance1 = new Singleton();
const instance2 = new Singleton();console.log(instance1 === instance2); // true

2、工廠模式(Factory Pattern)

特點
  • 通過一個工廠方法創建對象,而不是直接使用 new 操作符。
  • 子類可以通過工廠方法決定實例化的具體類。
適用場景
  • 創建復雜對象時,希望隱藏其創建細節。
  • 需要在運行時動態確定創建哪種對象。
class Product {constructor(name) {this.name = name;}
}class ProductFactory {static createProduct(type) {if (type === "A") {return new Product("Product A");} else if (type === "B") {return new Product("Product B");} else {throw new Error("Unknown product type");}}
}const productA = ProductFactory.createProduct("A");
console.log(productA.name); // Product A

3、觀察者模式(Observer Pattern)

特點
  • 定義對象間的一對多依賴關系。
  • 當一個對象的狀態改變時,所有依賴者都會收到通知并更新。
適用場景
  • 事件驅動的系統,例如 UI 事件監聽。
  • 多個模塊需要同步某個數據的變化。
class Subject {constructor() {this.observers = [];}addObserver(observer) {this.observers.push(observer);}notifyObservers(data) {this.observers.forEach((observer) => observer.update(data));}
}class Observer {update(data) {console.log("Observer received:", data);}
}const subject = new Subject();
const observer1 = new Observer();
const observer2 = new Observer();subject.addObserver(observer1);
subject.addObserver(observer2);subject.notifyObservers("Hello Observers!"); // All observers will log the message

4、策略模式(Strategy Pattern)

特點
  • 定義一系列算法,將它們封裝成獨立的策略類,并使它們可以互換
  • 避免了使用大量 if-elseswitch 語句。
適用場景
  • 動態選擇算法,或者讓算法的行為對客戶端透明。
class StrategyA {execute() {console.log("Strategy A executed");}
}class StrategyB {execute() {console.log("Strategy B executed");}
}class Context {setStrategy(strategy) {this.strategy = strategy;}executeStrategy() {this.strategy.execute();}
}const context = new Context();
context.setStrategy(new StrategyA());
context.executeStrategy(); // Strategy A executedcontext.setStrategy(new StrategyB());
context.executeStrategy(); // Strategy B executed

5、代理模式(Proxy Pattern)

特點
  • 為某個對象提供代理,以控制對該對象的訪問。
  • 可以用作緩存、權限控制、延遲加載等。
適用場景
  • 需要在訪問對象前后執行額外的操作。
class RealSubject {request() {console.log("RealSubject: Handling request.");}
}class Proxy {constructor(realSubject) {this.realSubject = realSubject;}request() {console.log("Proxy: Logging access.");this.realSubject.request();}
}const realSubject = new RealSubject();
const proxy = new Proxy(realSubject);
proxy.request();
// Proxy: Logging access.
// RealSubject: Handling request.

6、裝飾器模式(Decorator Pattern)

特點
  • 動態地給對象添加新功能,而不影響其他對象。
適用場景
  • 需要擴展類的功能,而不需要創建子類。
class Coffee {cost() {return 5;}
}class MilkDecorator {constructor(coffee) {this.coffee = coffee;}cost() {return this.coffee.cost() + 2;}
}class SugarDecorator {constructor(coffee) {this.coffee = coffee;}cost() {return this.coffee.cost() + 1;}
}let coffee = new Coffee();
coffee = new MilkDecorator(coffee);
coffee = new SugarDecorator(coffee);console.log(coffee.cost()); // 8

7、MVC(Model-View-Controller)

特點
  • 分離數據邏輯(Model)、用戶界面(View)和控制邏輯(Controller)。
  • 適合于用戶交互密集的應用。
適用場景
  • Web 應用開發(如 React 中的組件模式)。

8、MVVM(Model-View-ViewModel)

特點
  • ViewModel 作為 View 和 Model 的橋梁,提供數據綁定和雙向通信。
  • 在現代框架(如 Vue、Angular)中廣泛應用。

9、責任鏈模式(Chain of Responsibility)

特點
  • 將請求沿著責任鏈傳遞,直到某個對象處理請求。
  • 解耦請求發送者與處理者。
適用場景
  • 請求的處理有多個步驟或條件,且步驟順序可能改變。

總結

  • 創建型模式:如單例、工廠。
  • 結構型模式:如代理、裝飾器。
  • 行為型模式:如策略、責任鏈。
  • 架構模式:如 MVC、MVVM。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64006.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64006.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64006.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何完全剔除對Eureka的依賴,報錯Cannot execute request on any known server

【現象】 程序運行報錯如下: com.netflix.discovery.shared.transport.TransportException報錯Cannot execute request on any known server 【解決方案】 (1)在Maven工程中的pom去掉Eureka相關的引用(注釋以下部分&#xff0…

vscode寫python,遇到問題:ModuleNotFoundError: No module named ‘pillow‘(已解決 避坑)

1 問題: ModuleNotFoundError: No module named pillow 2 原因: 原因1:安裝Pillow的pip命令所處的python版本與vscode調用的python解釋器版本不同。 如: 原因2:雖然用的是pillow,但是寫代碼的時候只能用…

Ashy的考研游記

文章目錄 摘要12.1112.2012.21 DAY1(政治/英語)政治英語 12.22 DAY2(數學/專業課)數學專業課 結束估分 摘要 在24年的12月里,Ashy完成了他的考研沖刺,順利的結束了他本年度的考研之旅。 在十二月里&#…

AIGC實踐|AI/AR助力文旅沉浸式互動體驗探索

前言: 本篇文章的創作靈感來源于近期熱門話題——讓文物“動起來”,各大博物館成為新進潮流打卡地。結合之前創作的AI文旅宣傳片良好的流量和反饋,外加最近比較感興趣的AR互動探索,想嘗試看看自己能不能把這些零碎的內容整合起來…

tcp 的三次握手與四次揮手

問1: 請你說一下tcp的三次握手一次握手兩次握手三次握手問: 為什么不四(更多)次握手? 問 2: 請說一下 tcp 的 4 次揮手一次揮手兩次揮手問題:能不能等到數據傳輸完成再返回 ack? 三次揮手四次揮手問: 為什么要等兩個最大報文存在時間? bg: tcp 是可靠的連接,如何保證 建立連…

Kubernetes(k8s)離線部署DolphinScheduler3.2.2

1.環境準備 1.1 集群規劃 本次安裝環境為:3臺k8s現有的postgreSql數據庫zookeeper服務 1.2 下載及介紹 DolphinScheduler-3.2.2官網:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2 官網安裝文檔:https://dolphinscheduler.apach…

C++的侵入式鏈表

非侵入式鏈表 非侵入式鏈表是一種鏈表數據結構,其中每個元素(節點)并不需要自己包含指向前后節點的指針。鏈表的結構和節點的存儲是分開的,鏈表容器會單獨管理這些指針。 常見的非侵入式鏈表節點可以由以下所示,即&a…

Flutter組合動畫學習

如何使用動畫控制器和動畫來創建一個簡單的動畫效果。具體來說,它通過一個 AnimationController 來控制兩個動畫,一個用于旋轉,一個用于繪制。 前置知識點學習 SingleTickerProviderStateMixin SingleTickerProviderStateMixin 是 Flutter …

在vscode的ESP-IDF中使用自定義組件

以hello-world為例,演示步驟和注意事項 1、新建ESP-IDF項目 選擇模板 從hello-world模板創建 2、打開項目 3、編譯結果沒錯 正在執行任務: /home/azhu/.espressif/python_env/idf5.1_py3.10_env/bin/python /home/azhu/esp/v5.1/esp-idf/tools/idf_size.py /home…

2025差旅平臺怎么選?一體化、全流程降本案例解析

差旅支出在企業中一直是一項重要但容易被忽視的成本開支,尤其是在項目驅動型企業中,因頻繁的差旅需求,支出規模往往持續增長。以差旅平臺分貝通簽約伙伴——某智能制造業的業務模式為例,該模式要求員工定期前往不同的工廠、供應商…

【linux】NFS實驗

NFS NFS服務 nfs,最早是Sun這家公司所發展出來的,它最大的功能就是可以透過網絡,讓不同的機器,不同的操作系統,進行實現文檔的共享。所以你可以簡單的將他看做是文件服務器。 實驗準備 ①先準備一個服務器端的操作系統和客戶端的操作系統(Red Hat)。 ②選擇NAT模式,…

智源研究院與安謀科技達成戰略合作,共建開源AI“芯”生態

12月25日,智源研究院與安謀科技(中國)有限公司(以下簡稱“安謀科技”)與正式簽署戰略合作協議,雙方將面向多元AI芯片領域開展算子庫優化與適配、編譯器與工具鏈支持、生態系統建設與推廣等一系列深入合作&a…

ROG NUC:強大內核激發創意,AI賦能學子科技探索

有這么一款能夠激發無限創意、助力科技探索的迷你主機,它以其卓越的性能和迷你的身材成為了成為了ProArt百校行活動中的明星產品,助力廣大學子勇敢探索未知,追逐屬于自己的科技夢想。它就是ROG NUC 2024! 強大性能,創意…

從零玩轉CanMV-K230(8)-多線程例程

文章目錄 前言一、_thread模塊API二、使用示例創建并啟動線程停止線程_thread.exit() 總結 前言 K230上不支持threading,只能支持_thread,該模塊實現了相應 CPython 模塊的子集,CPython 是 Python 編程的參考實現 語言,也是最著名…

yii2 手動添加 phpoffice\phpexcel

1.下載地址:https://github.com/PHPOffice/PHPExcel 2.解壓并修改文件名為phpexcel 在yii項目的vendor目錄下創建一個文件夾命名為phpoffice 把phpexcel目錄放到phpoffic文件夾下 查看vendor\phpoffice\phpexcel目錄下會看到這些文件 3.到vendor\composer目錄下…

安卓多渠道apk配置不同簽名

一般簽名都是放在buildTypes里面: ... android {...defaultConfig {...}signingConfigs {release {storeFile file("myreleasekey.keystore")storePassword "password"keyAlias "MyReleaseKey"keyPassword "password"}}bu…

數據庫-用戶管理

一、創建用戶 create user xy104192..168.42.24 identified by 123456;xy104:用戶名 localhost;這個權限最高的root用戶 %:任務ip地址 192.168.42.24:登錄的IP地址 identified by ‘123456’:指定該用戶的密碼 mysql…

管理者需要的技能

管理者需要具備技術技能、人際技能和概念技能,這三種技能的內涵如下: 技術技能 專業知識與技術能力:指管理者掌握和運用某一專業領域內的知識、技術和方法的能力。這包括對特定行業的專業知識、技術流程、工具設備的熟悉和精通。例如&#x…

scala基礎學習(數據類型)-字符串

文章目錄 scala中的字符串引號單引號雙引號三引號 常用內置函數length 獲取字符串長度charAt 字符串元素訪問substring 獲取字串indexOf 獲取字串位置replace 字符串替換toLowerCase,toUpperCase 字符串大小寫轉換trim 去除首位空白符split 字符串切割以及查看startsWith,endsW…

數據庫安全-redisCouchdb

1.redis未授權訪問 默認端口:6379 1.1 Redis沙盒逃逸漏洞RCE-CVE-2022-0543 介紹:Redis 是一套開源的使用 ANSI C編寫、支持網絡、可基于內存亦可持久化的日志型、鍵值存儲數據庫,并提供多種語言的API。Redis 如果在沒有開啟認證的情況下,…