策略模式與狀態模式的比較

2021-09-01 21:08:07 字數 480 閱讀 3962

相同點

1都是行為型模式,都是用物件來封裝變化的行為

不同點1從結構上說,策略模式比狀態模式要簡單,策略模式中context一般只持有乙個strategy引用。而狀態模式持有行為物件的情況相對來說,就要複雜得多。有時是內部持有一組狀態物件,有時是呼叫公用的狀態物件。

2strategy物件一般不會持有自己的資料(因為策略模式封裝的只是演算法!!),而狀態物件則有可能持有自己的資料(stateless型或者state型)

3策略模式偏重於可替換的演算法,以及這些演算法在對應的context中的正確呼叫。而狀態模式偏重於各狀態自身的邏輯執行(這點和策略模式很 像),但是還有乙個就是各個狀態間的切換,以及切換時的初始化和清理。這是策略模式和狀態模式的明顯不同點!!狀態模式基礎上可以建立各種狀態機的機制, 這些狀態機是構成複雜邏輯(包括遊戲ai)的基礎。

4策略模式中行為物件的改變,一般都是外部造成的。而狀態模式中行為物件的改變,則即可能是外部造成,也可能是行為物件自身造成的。

狀態模式和策略模式比較

說到策略模式,我們最先想到的就是商店的收銀方式 不滿100,正常收費 超過100不滿300,超過的部分打八折 超過300,全價九折!解決這個問題最最普通的方法就是大量的if else 而它帶來的就是無情的難以維護,每次條件變更都會修改原 嚴重違反了開閉原則。顯而易見,策略模式的解決方式就是封裝了一系...

狀態模式和策略模式的比較

狀態模式和策略模式的比較 狀態模式 state pattern 和策略模式 strategy pattern 的實現方法非常類似,都是利用多型把一些操作分配到一組相關的簡單的類中,因此很多人認為這兩種模式實際上是相同的。然而在現實世界中,策略 如 一種商品的策略 和狀態 如同乙個按鈕來控制乙個電梯的...

策略模式 狀態模式

當設計乙個物件可能在不同情況下有不同的行為時,一般使用的是父類 子類 多型過載的方法,person a new whiteperson person b new blackperson a.speak i m white b.speak i m black 但這樣做不好的地方在於 假如物件建立後了之...