設計模式——狀態模式介紹

狀態模式是一種行為設計模式,它允許對象在內部狀態改變時改變它的行為。它基于對象的內部狀態而改變其行為,看起來好像修改了對象的類。

狀態模式的關鍵組件有三個:上下文(Context)、狀態(State)和具體狀態(Concrete State)。

下面是一個例子來說明狀態模式的應用:

// 抽象狀態類
interface State {void handle(Context context);
}// 具體狀態類1
class ConcreteState1 implements State {public void handle(Context context) {System.out.println("當前狀態是狀態1");context.setState(new ConcreteState2()); // 設置下一個狀態}
}// 具體狀態類2
class ConcreteState2 implements State {public void handle(Context context) {System.out.println("當前狀態是狀態2");context.setState(new ConcreteState1()); // 設置下一個狀態}
}// 上下文類
class Context {private State state;public Context(State state) {this.state = state;}public void setState(State state) {this.state = state;}public void request() {state.handle(this);}
}// 客戶端代碼
public class Main {public static void main(String[] args) {// 創建初始狀態State initialState = new ConcreteState1();Context context = new Context(initialState);// 發起請求context.request(); // 打印"當前狀態是狀態1"context.request(); // 打印"當前狀態是狀態2"context.request(); // 打印"當前狀態是狀態1"}
}

在上述示例中,狀態模式被用于管理上下文(Context)對象的不同狀態。每個具體狀態(Concrete State)都實現了狀態(State)接口,并根據需要進行狀態轉換。上下文類(Context)通過委托給當前狀態對象來處理請求,并可以在運行時更改狀態。

通過狀態模式,客戶端代碼可以與上下文對象進行交互,而不需要直接處理復雜的狀態邏輯。這對于需要根據狀態改變行為的場景非常有用,例如自動售貨機中的不同狀態(待機、售貨、缺貨等)的管理。

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

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

相關文章

年輕有為!2023兩院院士增選揭榜 45歲顏寧當選

大家好,我是極智視界,歡迎關注我的公眾號,獲取我的更多前沿科技分享 邀您加入我的知識星球「極智視界」,星球內有超多好玩的項目實戰源碼和資源下載,鏈接:https://t.zsxq.com/0aiNxERDq 通常,兩…

電商網站選擇云服務器要考慮什么?

極高的安全性 交易平臺最重要的是數據安全,這涉及到產品、用戶、平臺信息等,能夠保護數據隱私的安全,是網站交易的首要原則。 2020年,數據泄露、網絡滲透、大量數據被銷售、勒索軟件爆發......每個網站都可能成為黑客的目標&#…

CuratorFrameworkFactory.builder()方法可配置屬性

CuratorFrameworkFactory.builder()方法可以配置以下屬性: 1. connectString:ZooKeeper服務器的連接字符串。 2. sessionTimeoutMs:ZooKeeper會話超時時間。 3. connectionTimeoutMs:ZooKeeper連接超時時間。 4. retryPolicy&…

springboot自動重啟及SpringBoot Developer tools簡介

項目中引用了SpringBoot Developer tools&#xff0c;修改類后會自動重啟。 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional&…

BTS-GAN:基于MRI和條件對抗性網絡的乳腺腫瘤計算機輔助分割系統

BTS-GAN: Computer-aided segmentation system for breast tumor using MRI and conditional adversarial networks BTS-GAN&#xff1a;基于MRI和條件對抗性網絡的乳腺腫瘤計算機輔助分割系統背景貢獻實驗方法Parallel dilated convolution module&#xff08;并行擴展卷積模塊…

逸學java【初級菜鳥篇】9.5枚舉

hi&#xff0c;我是逸塵&#xff0c;一起學java吧 枚舉是信息的標志和分類 當一個變量有幾種固定可能的取值時&#xff0c;就可以將它定義為類型的枚舉。 優點&#xff1a;代碼可讀性好&#xff0c;入參約束嚴謹&#xff0c;代碼優雅&#xff0c;是最好的信息分類技術&#x…

【AI讀論文】AutoML的8年回顧:分類、綜述與趨勢

論文標題&#xff1a;Eight years of AutoML: categorisation, review and trends 論文鏈接&#xff1a;https://link.springer.com/article/10.1007/s10115-023-01935-1 本文主要圍繞自動機器學習&#xff08;AutoML&#xff09;展開了系統性的文獻綜述&#xff0c;總結了該領…

【文末送書】重磅!這本30w人都在看的Python數據分析暢銷書:更新了!

歡迎關注博主 Mindtechnist 或加入【智能科技社區】一起學習和分享Linux、C、C、Python、Matlab&#xff0c;機器人運動控制、多機器人協作&#xff0c;智能優化算法&#xff0c;濾波估計、多傳感器信息融合&#xff0c;機器學習&#xff0c;人工智能等相關領域的知識和技術。關…

div中添加el-loading(局部loading的使用)

效果&#xff1a;在div中實現el-loading <div class"content-main">{{ hotList }}</div>getHotList(columnType) {this.$nextTick(() > {var loading this.$loading({lock: true,text: "努力加載中...",spinner: "el-icon-loading&qu…

揭示卡爾曼濾波器的威力

一、說明 作為一名數據科學家&#xff0c;我們偶爾會遇到需要對趨勢進行建模以預測未來值的情況。雖然人們傾向于關注基于統計或機器學習的算法&#xff0c;但我在這里提出一個不同的選擇&#xff1a;卡爾曼濾波器&#xff08;KF&#xff09;。 1960 年代初期&#xff0c;Rudol…

天池 機器學習算法(一): 基于邏輯回歸的分類預測

pytorch實戰 課時7 神經網絡 MSE的缺點&#xff1a;偏導值在輸出概率值接近0或者接近1的時候非常小&#xff0c;這可能會造成模型剛開始訓練時&#xff0c;偏導值幾乎消失&#xff0c;模型速度非常慢。 交叉熵損失函數&#xff1a;平方損失則過于嚴格&#xff0c;需要使用更合…

開始通過 Amazon SageMaker JumpStart 在亞馬遜云科技上使用生成式 AI

目前&#xff0c;生成式 AI 正受到公眾的廣泛關注&#xff0c;人們圍繞著許多人工智能技術展開討論。很多客戶一直在詢問有關亞馬遜云科技生成式 AI 解決方案的更多信息&#xff0c;本文將為您進行解答。 這篇文章通過一個真實的客戶使用案例概述了生成式 AI&#xff0c;提供了…

感恩節99句祝福語,感恩父母老師朋友親人朋友們,永久快樂幸福

1、流星讓夜空感動&#xff0c;生死讓人生感動&#xff0c;愛情讓生活感動&#xff0c;你讓我感動&#xff0c;在感恩節真心祝福你比所有的人都開心快樂。 2、感恩節到了&#xff0c;想問候你一下&#xff0c;有太多的話語想要說&#xff0c;但是不知從何說起&#xff0c;還是用…

定位鼠標懸浮才出現的元素

第一步&#xff1a;按F12進入開發者模式 第二步&#xff1a;點擊Sources. 第三步&#xff1a;鼠標進入&#xff0c;觸發懸浮框彈出&#xff0c;然后鼠標停止不要移動。 第四步&#xff1a;按F8 或者&#xff08;Ctrl\&#xff09;&#xff0c;正常情況下&#xff0c;此時頁…

讓SOLIDWORKS Composer動畫在PPT中隨意轉換

SOLIDWORKS Composer作為一款易學易用的技術圖解軟件&#xff0c;非常適合用來給客戶展示自己的產品。這里我們教大家如何將Composer文件插入大PPT中&#xff0c;并任意切換文件&#xff0c;用以給客戶展示不用的方案和產品。 1.首先大家要安裝SOLIDWORKS Composer Player 這個…

【2021集創賽】基于ARM-M3的雙目立體視覺避障系統 SOC設計

本作品參與極術社區組織的有獎征集|秀出你的集創賽作品風采,免費電子產品等你拿~活動。 團隊介紹 參賽單位&#xff1a;上海電力大學 隊伍名稱&#xff1a;駭行隊 總決賽獎項&#xff1a;二等獎 1.摘要 隨著信息技術的發展&#xff0c;AGV&#xff08;Automated Guided Vehic…

21款奔馳GLC260L升級HUD抬頭顯示 平視儀表信息

隨著科技飛速地發展&#xff0c;從汽車領域就可以看出&#xff0c;尤其是汽車的抬頭顯示器&#xff0c;一經推出就吸引了很多的車主。 升級HUD抬頭顯示&#xff0c;HUD與汽車系統進行完整的數據信息連接&#xff0c;整合成大數據&#xff0c;然后將一些重要信息映射到車窗玻璃…

中低壓MOSFET 2N7002W 60V 300mA 雙N通道 SOT-323封裝

2N7002W小電流雙N通道MOSFET&#xff0c;電壓60V電流300mA&#xff0c;采用SOT-323封裝形式。超高密度電池設計&#xff0c;適用于極低的ros (on)&#xff0c;具有導通電阻和最大直流電流能力&#xff0c;ESD保護。可應用于筆記本中的電源管理&#xff0c;電池供電系統等產品應…

VUE3+Springboot實現SM2完整步驟

一.VUE3代碼實現 1.安裝依賴 npm install --save sm-crypto 2.導入sm2 const sm2 require(sm-crypto).sm2 3.定義公鑰私鑰 var privateKey "私鑰";//解密使用 var publicKey "公鑰";//加密使用 4.設置加密模式 //cipherMode [加密模式 C1C3C2:1,…

2023亞太杯數學建模競賽C題思路分析+代碼+論文

C題&#xff1a;The Development Trend of New Energy Electric Vehicles in China中國談新能源電動汽車的發展趨勢 新能源汽車是指采用先進的技術原理、新技術和新結構&#xff0c;以非常規車用燃料為動力來源(非常規車用燃料是指除汽油和柴油以外的燃料)&#xff0c;并集成了…