狀態模式和策略模式區別


學完策略模式和狀態模式后,對比發現兩者的關系類圖幾乎一樣,遂產生了疑問,這兩者模式幾乎一樣的設計,那他兩有什么區別嗎

不過既然是兩者設計模式,那他們肯定不一樣了,哪怕是失散多年的孿生兄弟,那也只是同表不同里

下面結合書上和網上的博客記錄下我的理解

策略模式類圖:

狀態模式類圖:

 

策略模式:其思想是針對一組算法,將每一種算法都封裝到具有共同接口的獨立的類中,從而是它們可以相互替換。策略模式的最大特點是使得算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能

狀態模式:允許一個對象在其內部狀態改變時改變它的行為。對象看起來似乎修改了它的類。

在很多情況下,一個對象的行為取決於一個或多個動態變化的屬性,這樣的屬性叫做狀態,這樣的對象叫做有狀態的(stateful)對象,這樣的對象狀態是從事先定義好的一系列值中取出的。當一個這樣的對象與外部事件產生互動時,其內部狀態就會改變,從而使得系統的行為也隨之發生變化。

 

使用場景

 

策略模式:策略模式的Strategy類層次為Context定義了一系列的可供重用的算法或行為。繼承有助於析取出這些算法中的公共功能。在實踐中,我們發現可以用它來封裝幾乎任何類型的規則,只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式處理這種變化的可能性。

狀態模式:狀態模式主要解決的是當控制一個對象狀態轉換的條件表達式過於復雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把復雜的判斷邏輯簡化。當一個對象的行為取決於它的狀態,並且它必須在運行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式了。

 

重點(我認為主要的區別)

策略模式:策略模式的客戶端必須對所有的策略類相當了解,明確當前場景下各種策略的利弊,權衡在當前場景下應該使用哪種策略,也就是是說策略類對客戶端是暴露的

狀態模式:狀態模式依賴於其狀態的變化時其內部的行為發生變化,將動作委托到代表當前狀態的對象,對外表現為類發生了變化。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM