命令模式,觀察者模式,狀態模式,享元模式

什么是命令模式?

核心思想是將原本直接調用的方法封裝為對象(如AttackCommand,對象包含??執行邏輯??和??上下文信息??(如目標、參數)。比如,玩家的按鍵操作被封裝成一個命令對象,而不是直接調用角色的方法,可以支持撤銷/重做。

這樣可以將請求的發起者和執行者解耦

如何將"行為請求者"與"行為實現者"解耦?將一組行為抽象為對象,可以實現二者之間的松耦合,這是命令模式的使用場景

使用時機當需要先將一個函數登記上,然后再以后調用此函數時,就需要使用命令模式,其實這就是回調函數。

有時候需要向某些對象發送請求,但是并不知道請求的接收者是誰,也不知道被請求的操作是什么。此時希望用一種松耦合的方式來設計程序,使得請求發送者和請求接收者能夠消除彼此之間的耦合關系

例子:拿訂餐來說,客人需要向廚師發送請求,但是完全不知道這些廚師的名字和聯系方式,也不知道廚師炒菜的方式和步驟。 命令模式把客人訂餐的請求封裝成 command 對象,也就是訂餐中的訂單對象這個對象可以在程序中被四處傳遞,就像訂單可以從服務員手中傳到廚師的手中。這樣一來,客人不需要知道廚師的名字,從而解開了請求調用者和請求接收者之間的耦合關系

什么是觀察者模式?

觀察者模式是關于多個對象想知道一個對象中數據變化情況。是一種一對多的依賴關系,當一個對象的狀態發生變化時,所有它的“觀察者”都得到通知。

主要解決:一個對象狀態改變給其他對象通知的問題,而且要考慮到易用和低耦合,保證高度的協作。

事件
一個類對象可以通過事件來通知別個類對象,如果這個事件發生了,那么關心、訂閱這個事件的對象們會紛紛作出反應

事件必須用委托類型來聲明,并且只能由該委托類型來訂閱

委托
用于將方法作為參數傳遞給其他方法,是引用類型

使用delegate關鍵字來聲明一個類型,然后再創建這個委托類型實例

委托的優勢:多播和動態綁定

Action委托:指向一個無返回值的方法

Func委托:指向一個有返回值的方法

使用場景

(1)當一個對象的數據更新時需要通知其他對象,但這個對象又不希望和被通知的那些對象形成緊耦合。

(2)當一個對象的數據更新時,這個對象需要讓其他對象也各自更新自己的數據,但這個對象不知道具體有多少對象需要更新數據

觀察者模式滿足“開-閉原則”

對擴展開放??

  • ??新增觀察者無需修改主題代碼

  • ??主題可以動態增減觀察者

對修改關閉??

  • ??主題的邏輯不因觀察者變化而修改

什么是狀態模式?

主要解決:當控制一個對象狀態的條件表達式過于復雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把復雜的判斷邏輯簡化。

意圖:允許一個對象在其內部狀態改變時改變它的行為

使用狀態模式,可以很好地避免過多的if–else –分支,狀態模式將每一個狀態分支放入一個獨立的類中,每一個狀態對象都可以獨立存在,程序根據不同的狀態使用不同的狀態對象來實現功能

要使用狀態模式,我們必須明確兩個東西:狀態和每個狀態下執行的動作

在狀態模式中,因為所有的狀態都要執行相應的動作,所以我們可以考慮將狀態抽象出來。

狀態的抽象一般有兩種形式:接口和抽象類如果所有的狀態都有共同的數據域,可以使用抽象類,但如果只是單純的執行動作,就可以使用接口。

狀態模式和策略模式的不同?

用狀態模式的情況??

? ??對象行為由內部狀態決定??(如角色狀態、AI行為)。
? ??狀態之間有邏輯關聯??(如“待機→行走→攻擊→待機”)。
? ??狀態轉換由對象內部管理??(如角色自動進入下一個狀態)。

??用策略模式的情況??

? ??需要動態切換算法??(如不同武器效果、排序算法)。
? ??策略之間無邏輯關聯??(如火焰、冰凍、雷電是獨立的)。
? ??客戶端決定使用哪種策略??(如玩家選擇武器)。

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

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

相關文章

Window Server 2019--07 PKI、SSL網站與郵件安全

了解PKI、SSL技術的核心原理掌握PKI架構服務器配置掌握證書管理與應用 公鑰基礎設施(Public Key Infrastructure,PKI)是一個完整的頒發、吊銷、管理數字證書的系統,是支持認證、加密、完整性和可追究性服務的基礎設施。PKI通過第…

從C++編程入手設計模式2——工廠模式

從C編程入手設計模式 工廠模式 ? 我們馬上就要迎來我們的第二個創建型設計模式:工廠方法模式(Factory Method Pattern)。換而言之,我們希望使用一個這樣的接口,使用其他手段而不是直接創建的方式(說的有…

MySQL、PostgreSQL、Oracle 區別詳解

MySQL、PostgreSQL、Oracle 區別詳解 一、基礎架構對比 1.1 數據庫類型 MySQL:關系型數據庫(支持NoSQL插件如MySQL Document Store)PostgreSQL:對象-關系型數據庫(支持JSON等半結構化數據)Oracle:多模型數據庫(關系型+文檔+圖+空間等)關鍵結論:PostgreSQL在數據類型…

window11系統 使用GO語言建立TDengine 連接

目錄 1、安裝GCC、TDengine-client 1、github下載mingw64 軟件包 2、解壓指定目錄、配置環境變量 3、檢驗gcc是否安裝成功 4、安裝TDengine-client 2、配置go環境變量 3、配置Goland 系統變量、重啟Goland(該軟件自己也有系統變量,有時候會和win…

VR 賦能病毒分離鑒定:開啟微觀探索新視界

在大眾認知里,VR 技術往往與沉浸式游戲體驗、虛擬社交緊密相連,讓人仿佛置身于奇幻的虛擬世界中,感受著科技帶來的奇妙娛樂享受。而病毒分離鑒定,聽起來則是一個充滿專業性與嚴肅性的科學領域,它關乎病毒的研究、疾病的…

Azure Devops pipeline 技巧和最佳實踐

1. 如何顯示release pipeline ? 解決方法: 登錄devops, 找到organization - pipeline - setting下的Disable creation of classic release pipelines,禁用該選項。 然后在project - pipeline - setting,禁用Disable creation of classic release pipelines 現在可以看到r…

GPU的通信技術

GPU 之間直接通信主要采用了以下幾種技術1: GPUDirect P2P:NVIDIA 開發的技術,用于單機上的 GPU 間高速通信。在沒有該技術時,GPU 間數據交換需先通過 CPU 和 PCIe 總線復制到主機固定的共享內存,再復制到目標 GPU&…

重新測試deepseek Jakarta EE 10編程能力

聽說deepseek做了一個小更新,我重新測試了一下Jakarta EE 10編程能力;有點進步,遺漏的功能比以前少了。 采用Jakarta EE 10 編寫員工信息表維護表,包括員工查詢與搜索、員工列表、新增員工、刪除員工,修改員工&#xf…

?Windows 11 安裝 Miniconda 與 Jupyter 全流程指南?

?一、Miniconda 安裝與配置? 1. 下載安裝程序 ?訪問官網?:打開 Miniconda 官網,下載 ?Python 3.x 版本的 Windows 64 位安裝包?。?安裝路徑選擇?: 推薦路徑:D:\Miniconda3(避免使用中文路徑和空格&#xff0…

RuoYi前后端分離框架集成手機短信驗證碼(一)之后端篇

一、背景 本項目基于RuoYi 3.8.9前后端分離框架構建,采用Spring Security實現系統權限管理。作為企業級應用架構的子模塊,系統需要與頂層項目實現用戶數據無縫對接(以手機號作為統一用戶標識),同時承擔用戶信息采集的重要職能。為此,我們在保留原有賬號密碼登錄方式的基…

Java ThreadLocal 應用指南:從用戶會話到數據庫連接的線程安全實踐

ThreadLocal 提供了一種線程局部變量(thread-local variables)的機制,這意味著每個訪問該變量的線程都會擁有其自己獨立的、初始化的變量副本。這確保了線程之間不會共享數據,也避免了因共享數據而可能產生的競爭條件和同步問題&a…

GitCode鏡像門法律分析:PL協議在中國的司法實踐

本文以2022年引發廣泛爭議的GitCode開源代碼鏡像事件為研究對象,系統分析公共許可證(Public License,PL)在中國法律體系下的適用性挑戰。通過研究中國法院近五年涉及GPL、Apache、MIT等主流協議的21個司法案例,揭示開源…

Rider崩潰問題終極解決指南

JetBrains Rider 2025.1.2 頻繁崩潰問題解決指南 問題描述: 編輯器頻繁自動崩潰,任務管理器顯示大量 Git for Windows 進程被啟動。 原因分析: 這是 Rider 的自動版本控制功能導致的。當檢測到代碼變更時,編輯器會不斷嘗試啟動 …

4 串電池保護芯片創芯微CM1341-DAT使用介紹

特性 專用于 4 串鋰/鐵/鈉電池的保護芯片,內置有高精度電壓檢測電路和電流檢測電路。通過檢測各節電池的電壓、充放電電流及溫度等信息,實現電池過充電、過放電、均衡、斷線、低壓禁充、放電過電流、短路、充電過電流和過溫保護等功能,放電過…

煤礦電液控制器-底座傾角傳感器4K型護套連接器ZE0703-09(100)

煤礦電液控制器作為井下自動化開采的核心設備,其可靠性直接關系到生產安全與效率。在眾多關鍵組件中,底座傾角傳感器4K型護套連接器ZE0703-09(100)憑借獨特設計成為保障系統穩定運行的"神經末梢",其技術特性…

Vue計算屬性與監視

在Vue.js中,處理復雜的邏輯和數據依賴關系是構建高效、可維護的前端應用的關鍵。Vue提供了兩種強大的工具來幫助我們實現這一點:計算屬性(Computed Properties) 和 偵聽器(Watchers)。本文將深入探討這兩者…

基于RT-Thread的STM32F4開發第七講——RTC(硬件、軟件)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、RT-Thread工程創建1.硬件RTC配置2.軟件RTC配置3.RTC鬧鐘配置 總結 前言 本章是基于RT-Thread studio實現RTC硬件和軟件下的日歷時鐘功能,開發板…

Java面試:從Spring Boot到分布式系統的技術探討

場景一:電商平臺的訂單處理 面試官: “謝先生,假設我們在一個電商平臺工作,你將如何使用Spring Boot構建一個訂單處理服務?” 謝飛機: “這個簡單,我會使用Spring Boot快速啟動項目&#xff0…

【Redis】string 類型

string 一. string 類型介紹二. string 命令set、getmget、msetsetnx、setex、psetexincr、incrby、decr、decrby、incrbyfloatappend、getrange、setrange、strlen 三. string 命令小結四. string 內部編碼方式五. string 的應用場景緩存功能計數功能共享會話手機驗證碼 六. 什…

HTTP/HTTPS與SOCKS5三大代理IP協議,如何選擇最佳協議?

在復雜多變的網絡環境中,代理協議的選擇直接影響數據安全、訪問效率和業務穩定性。HTTP、HTTPS和SOCKS5作為三大主流代理協議,各自針對不同場景提供獨特的解決方案。本文將從協議特性、性能對比到選型策略,為您揭示如何根據業務需求精準匹配最…