行為模式8.狀態模式------燈泡狀態切換

行為型模式

  1. 模板方法模式(Template Method Pattern)
  2. 命令模式(Command Pattern)
  3. 迭代器模式(Iterator Pattern)
  4. 觀察者模式(Observer Pattern)
  5. 中介者模式(Mediator Pattern)
  6. 備忘錄模式(Memento Pattern)
  7. 解釋器模式(Interpreter Pattern)
  8. 狀態模式(State Pattern)
  9. 策略模式(Strategy Pattern)
  10. 職責鏈模式(Chain of Responsibility Pattern)
  11. 訪問者模式(Visitor Pattern)

當涉及狀態模式時,它主要用于在對象的狀態改變時改變其行為。狀態模式允許對象在內部狀態改變時改變它的行為,看起來好像是改變了它的類。

以下是狀態模式的基本結構和示例:

結構

  1. Context(上下文):定義客戶感興趣的接口,維護一個當前狀態,并將與狀態相關的操作委托給當前狀態對象。
  2. State(狀態):定義一個接口以封裝與Context的一個特定狀態相關的行為。
  3. ConcreteState(具體狀態):每一個具體狀態類實現了與Context的一個狀態相關的行為。

示例

讓我們以一個簡單的燈光控制器為例來說明狀態模式。

// State 接口  
interface State {  void doAction(Context context);  
}  // ConcreteState 實現  
class OnState implements State {  public void doAction(Context context) {  System.out.println("Light is turned on");  context.setState(this);  }  
}  class OffState implements State {  public void doAction(Context context) {  System.out.println("Light is turned off");  context.setState(this);  }  
}  // Context 類  
class Context {  private State state;  public Context() {  state = null;  }  public void setState(State state) {  this.state = state;  }  public State getState() {  return state;  }  
}  // 使用示例  
public class StatePatternExample {  public static void main(String[] args) {  Context context = new Context();  State onState = new OnState();  onState.doAction(context);  State offState = new OffState();  offState.doAction(context);  }  
}  

在這個示例中,`Context`?表示燈光控制器,`State`?是一個接口,定義了狀態改變時的行為。`OnState`?和?`OffState`?分別表示開和關的狀態,它們實現了?`State`?接口來定義狀態改變時的行為。在?`StatePatternExample`?中,我們創建了一個?`Context`?實例,并演示了狀態從開到關的轉變。

這就是狀態模式的基本結構和一個簡單示例。狀態模式有助于在對象的狀態變化時封裝對象的行為,并使得狀態轉換更加清晰和易于維護。

狀態模式和策略模式在某種程度上有一些相似之處,因為它們都涉及到在運行時改變對象的行為。

相似之處

  1. 封裝算法/行為:兩者都涉及將算法或行為封裝到獨立的類中,以便在運行時進行切換。
  2. 解耦:狀態模式和策略模式都有助于將特定的行為與上下文對象解耦,使得它們可以獨立地變化和復用。

不同之處

  1. 關注點:狀態模式關注對象在不同狀態下的行為變化,而策略模式關注在不同策略(算法)下的行為變化。
  2. 觸發方式:狀態模式的行為轉換通常是由對象內部的狀態改變觸發的,而策略模式的行為轉換通常是由客戶端顯式調用觸發的。

總結

雖然這兩種模式有相似之處,但它們的關注點和使用場景不同。狀態模式適用于對象狀態改變時的行為變化,而策略模式適用于根據不同的需求選擇不同的算法或策略。理解它們之間的區別有助于選擇適當的模式來解決特定的設計問題。

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

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

相關文章

融合CDN是什么?為什么需要融合CDN?其應用方法與原理是什么?

你了解融合CDN是什么嗎?為什么需要融合CDN?你可能有聽過融合CDN,但你知道它的應用方法與原理嗎?本文將帶你一次了解什么是融合CDN,詳細介紹融合CDN的應用方法與運用原理,立刻替您解開心中疑惑! …

【Qt】xml Dom復制

1. 功能 將A.xml文件中的copyNode節點全部復制到B.xml中的testRoot節點。 2. 代碼 #include <QDomDocument> #include <QFile> #include <QIODevice> #include <QtXml>void copyNodeXml() {// 源文件DOMQDomDocument ADoc;// 加載源文件QFile fileA(…

[微信小程序知識點]自定義組件-拓展-外部樣式類

使用組件時&#xff0c;組件使用者可以給組件傳入css類名&#xff0c;通過傳入的類名修改組件的樣式 。 如果需要使用外部樣式類修改組件的樣式&#xff0c;在Component中需要用extemalClassess定義若干個外部樣式類。 具體用法如下: (1)在Components文件里創建custom06組件 (…

EtherCAT ESI文件CRC32計算規則和方法

EtherCAT ESI文件CRC32計算規則和方法 EtherCAT ESI文件的CRC32計算遵循特定的規則&#xff0c;以確保設備描述的完整性。以下是詳細的規則和計算步驟&#xff0c;以及C#實現示例&#xff1a; 計算規則 使用標準的CRC32多項式&#xff1a;0x04C11DB7初始值&#xff1a;0xFFF…

Python實現文件訪問和加密GUI應用程序

Python實現文件訪問和加密 簡單的文本文件加密和解密的GUI應用程序&#xff0c;實現了一個簡單的凱撒密碼加密和解密算法 運行效果 1.實現UI界面 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yG28ajb1-1720676735133)(https://i-blog.csdnimg.…

免費SSL證書申請指南

申請免費SSL證書的步驟相對直接&#xff0c;以下是基于當前可用信息的簡明指南&#xff0c;特別是針對一些熱門的免費SSL證書提供商&#xff0c;下面以JoySSL證書商為例&#xff1a; 1、注冊賬號 打開JoySSL官網&#xff0c;注冊并填寫邀請碼230920&#xff0c;獲取免費證書與…

RK系列UST-OTG切換為HOST模式或DEVICE模式的兩種方法(DTS修改和軟件命令修改)

1、修改DTS dr_mode: tells Dual-Role USB controllers that we want to work on a particular mode. Valid arguments are “host”, “peripheral” and “otg”. In case this attribute isn’t passed via DT, USB DRD controllers should default to OTG. usb20_otg: usb…

淺談三車平臺車型對比功能實用獎-競品分析

目錄&#xff1a; 一、項目背景 二、競品概述 三、競品目標功能對比 3.1、車型對比入口位置 3.2、車型對比首頁 3.3、添加/刪除車型功能 3.4、選擇車型后功能對比 3.5、配置對比的功能 四、總結 一、項目背景 在汽車購買過程中&#xff0c;消費者經常面臨著選擇困難&…

六、數據可視化—Echars(爬蟲及數據可視化)

六、數據可視化—Echars&#xff08;爬蟲及數據可視化&#xff09; Echarts應用 Echarts Echarts官網&#xff0c;很多圖表等都是我們可以 https://echarts.apache.org/zh/index.html 是百度自己做的圖表&#xff0c;后來用的人越來越多&#xff0c;捐給了orange組織&#xf…

【好生意】暢捷通好生意各版本之間的區別

【暢捷通好生意各版本區別】 隨著產品線的增加&#xff0c;不同版本之間存在差異。 以下是針對自己使用、研究過程中的記錄。 完善ing 功能普及版標準版采購運費分攤沒有單獨的采購費用分攤單&#xff0c;但是支持隨單分攤。支持

企業如何挑選策劃公司,這些標準你了解嗎?

誠然&#xff0c;在這個競爭激烈的市場環境下&#xff0c;企業有時候就像是站在十字路口的旅人&#xff0c;面前擺著的是一條條花錢卻未必能看見收益的道路。 這時候&#xff0c;找一家對的策劃公司就很重要&#xff0c;這里分享一點個人多年經驗&#xff0c;希望對你有所幫助…

【精簡教程】VSCode 連接 Remix

初始化 Node.js 項目 yarn init v1.22.19安裝 Remix yarn add remix-project/remixd -g?? 此時如果直接敲 remix&#xff0c;顯示找不到這個命令。 使用 Node.js 來直接執行 remixd.js 文件 node node_modules\remix-project\remixd\src\bin\remixd.js&#x1f604; 連接上了…

安全極客團隊榮獲首屆“矩陣杯”網絡安全大賽人工智能挑戰賽“三等獎”

近日&#xff0c;東半球規格高、規模大且獎金豐厚的網絡安全頂級賽事——首屆“矩陣杯”網絡安全大賽在青島國際會議中心圓滿落幕。本次大賽設置了五大賽事&#xff0c;包括通用產品漏挖賽、國產軟硬件安全檢測賽、原創漏洞挖掘賽、人工智能&#xff08;大模型&#xff09;挑戰…

【Linux】Windows平臺使用gdb調試FFmpeg源碼

FFmpeg是一個跨平臺的多媒體庫&#xff0c;有時需要在別的平臺上進行開發和調試&#xff0c;記錄一下在linux環境下使用gdb來調試FFmpeg源碼的基本方式 1.可執行文件 在windows平臺使用linux環境來調試FFmpeg源碼&#xff0c;需要編譯生成一個后綴有_g的exe文件&#xff0c;參…

HTTP中常見的狀態碼有哪些?

常用的包括以下幾個&#xff1a; 200&#xff1a;表示客戶端請求成功 201&#xff1a;請求成功,服務器創建了新資源。 204&#xff1a;無內容&#xff0c;服務器成功處理請求&#xff0c;但未返回任何內容。 206: 表示“部分內容”,當客戶端請求一個資源的一部分時&#xff0c;…

YOLOv10部署教程,使用tensorRT部署,有轉化和推理代碼

YOLOv10部署教程,使用tensorRT部署,有轉化和推理代碼 一、使用平臺1. 轉化onnx模型轉化trt模型模型推理全部的代碼論文題目:YOLOv10: Real-Time End-to-End Object Detection 研究單位:清華大學 論文鏈接:http://arxiv.org/abs/2405.14458 代碼鏈接:https://github.com/T…

每天一個數據分析題(四百二十三)- 置信區間

在給定的顯著性水平下&#xff0c;某一特定的X水平上&#xff0c;總體Y分布的離散度越大&#xff0c;即σ^2越大&#xff0c;則 A. 預測區間越寬&#xff0c;精度越低 B. 預測區間越寬&#xff0c;預測誤差越小 C. 預測區間越窄&#xff0c;精度越高 D. 預測區間越窄&#…

如何在idea安裝git,使用gitee?

一、什么是git&#xff0c;git與gitee、GitHub的關系&#xff1f; 1.什么是git&#xff1f; Git 是一個開源的分布式版本控制系統&#xff0c;用于企業項目中程序員協同開發。 2.git與gitee、GitHub的關系是什么&#xff1f; git &#xff1a;Git是一種版本控制系統&#x…

看完這篇,你的服務設計能力將再次進化!

引言 在當今快速演變的技術場景中&#xff0c;服務設計不僅僅是遵循通用的設計規范和最佳實踐的問題&#xff0c;它更深層次地觸及到如何在滿足這些標準的同時&#xff0c;確保服務能夠靈活適應未來的變化、滿足用戶的期望。本篇文章旨在探討在遵循通用設計規范之外&#xff0…

Three.js相機簡明教程

相機校準是 3D 計算機圖形學中的一個基本概念&#xff0c;涉及設置虛擬相機以模擬真實世界相機的視角和行為。在 Three.js&#xff08;一種流行的 3D 渲染 JavaScript 庫&#xff09;中&#xff0c;了解相機校準對于創建逼真且身臨其境的 3D 場景至關重要。在本文中&#xff0c…