java状态模式和策略模式_Java状态和策略设计模式之间的差异
java狀態模式和策略模式
為了在Core Java應用程序中正確使用狀態和策略設計模式,對于Java開發人員清楚地了解它們之間的區別很重要。 盡管狀態和策略設計模式的結構相似,并且都基于開放式封閉設計原則,從SOLID設計原則表示為“ O”,但它們在意圖上卻完全不同。 Java中的策略設計模式用于封裝相關的算法集,以為客戶端提供運行時靈活性。 客戶端可以在運行時選擇任何算法,而無需更改使用Strategy對象的Context類。 策略模式的一些流行示例是編寫代碼,該代碼使用諸如加密,壓縮或排序算法之類的算法。
另一方面,狀態設計模式允許對象在不同狀態下表現不同。 由于現實世界中的對象通常具有狀態,并且它們在不同狀態下的行為也有所不同,例如,自動售貨機僅在處于hasCoin狀態時才出售物品,因此只有在您將硬幣放在硬幣上后,它才會出售。 現在您可以清楚地看到策略和狀態模式之間的區別 ,這里的意圖是不同的。 狀態模式有助于對象管理狀態,而策略模式則允許客戶選擇不同的行為。 另一個不容易看到的差異是,誰推動了行為的改變。 在使用策略模式的情況下,它是為上下文提供不同策略的客戶端,在狀態模式上,狀態轉換由上下文或狀態本身管理。 此外,如果要在State對象本身中管理狀態轉換,則它必須保存Context的引用,例如自動售貨機,以便它可以調用setState()方法來更改Context的當前狀態。 另一方面,Strategy對象從不持有Context的引用,而是將選擇的Strategy傳遞給Context的客戶端。 由于狀態和策略模式之間的差異是Interviews上流行的Java設計模式問題之一 ,因此在這篇Java設計模式文章中,我們將對此進行更仔細的研究。 我們將探討Java中的策略和狀態設計模式之間的相似點和不同點,這將有助于增進您對這兩種模式的理解。
如果查看狀態和策略設計模式的UML圖,它們看起來彼此非常相似。 使用State對象更改其行為的對象稱為Context對象,類似地,使用Strategy對象更改其行為的對象也稱為Context對象。 記住客戶端與Context對象進行交互。 在狀態模式的情況下,上下文將方法調用委托給以當前對象形式保存的狀態對象,而在策略模式的情況下,上下文使用作為參數傳遞或在創建Context對象時提供的Strategy對象。
Java狀態模式的UML圖
此UML圖是用于狀態設計模式的,用于解決用Java創建自動售貨機的面向對象設計的經典問題。 您可以看到自動售貨機狀態使用一個接口表示,該接口還具有實現以表示具體狀態的實現。 每個狀態還持有Context對象的引用,以由于Context觸發的動作而轉換到另一個狀態。
Java策略模式的UML圖
此UML圖用于策略設計模式,實現排序功能。 由于排序算法很多,這種設計模式使客戶可以在對對象進行排序時選擇算法。 實際上,Java Collection框架利用此模式來實現
Collections.sort()方法,用于對Java中的對象進行排序。 唯一的區別是不是允許客戶選擇排序算法,而是允許他們通過在Java中傳遞Comparator或Comparable接口的實例來指定比較策略。
讓我們看看這兩個核心Java設計模式之間的更多相似之處:
因此,現在我們知道國家和戰略在結構上相似,意圖也不同。 讓我們回顧一下這些設計模式之間的一些關鍵區別。
這全是Java狀態和策略模式之間的差異 。 就像我說的那樣,它們在類圖和UML圖中看起來都很相似,它們都強制執行Open Closed設計原則并封裝了行為。 使用策略設計模式來封裝在運行時提供給Context的算法或策略,它可以作為參數或組合對象,并可以使用狀態模式來管理Java中的狀態轉換。
翻譯自: https://www.javacodegeeks.com/2014/04/difference-between-state-and-strategy-design-pattern-in-java.html
java狀態模式和策略模式
總結
以上是生活随笔為你收集整理的java状态模式和策略模式_Java状态和策略设计模式之间的差异的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为电脑充不上电让换主板(华为电脑充电接
- 下一篇: java美元兑换,(Java实现) 美元