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