CodeGym/Java Course/Module 3 a ɛto so abien/行為模式,第 2 部分

行為模式,第 2 部分

開放

2.1 狀態

狀態是一種行為設計模式。它用於在程序執行期間對象必鬚根據其狀態更改其行為的情況。

狀態

該模式由 3 個塊組成:

上下文是一個類,其對象應根據狀態更改其行為。

狀態是每個具體狀態必須實現的接口。通過此接口,Context 對象通過將方法調用委託給它來與狀態交互。接口應該包含向其行為要改變的對象反饋的方法。

為此,使用了一個事件(模式發布者 - 訂閱者)。這是必要的,以便在事件發生時在程序執行期間替換狀態對象。可能存在上下文本身定期輪詢狀態對像以進行轉換的情況。

ConcreteState1, ConcreteState2 - 具體狀態的類。應包含有關對象可以從當前狀態通過的條件和狀態的信息。例如,一個對象可以從 ConcreteState1 轉到 ConcreteState2 和 ConcreteState3,然後從 ConcreteState2 回到 ConcreteState1,等等。其中之一的對像在創建時必須包含上下文。

例如,您正在編寫一個角色可以奔跑、游泳和飛行的遊戲。如果你的角色掉進水里,那麼限制他在水中的行為是合理的:現在他不能射擊,但他仍然有一些動作:向前、向右、向左遊等等。

你的角色的狀態可以用一個 State 對象來描述,它有可以調用的方法並且會做一些事情。在您的角色進入水中後,您只需更改對其中另一個 State 對象的引用 - 它就會更改其狀態。

2.2 策略

策略是一種行為設計模式,用於定義一系列算法、封裝每個算法並使它們可以互換。這允許您通過定義適當的類來選擇算法。

Strategy 模式允許您更改選定的算法,而不管使用它的客戶端對像如何。

戰略

策略模式允許您根據上下文使用不同的業務規則或算法。它用於必鬚根據系統(或其環境)的當前狀態在同一位置使用不同算法的情況。

優勢:

  • 封裝各種算法的實現,系統變得獨立於業務規則可能發生的變化;
  • 以一種標準方式調用所有算法;
  • 不使用開關和/或條件語句。

這種模式有點類似於State模式,但這裡強調的不是狀態,而是行為。假設您遊戲中的角色可以更換武器。然後在更換武器時,您可以簡單地更改對描述該武器工作原理的對象的引用。

2.3 模板法

模板方法

抽像類(abstract class)——定義繼承者中被替換的抽像操作,以實現算法的步驟;實現定義算法骨架的模板方法。模板方法調用抽像類中定義的替換和其他操作。

具體類(concrete class)——以實現所必需的方式實現被替換的操作。具體類假定算法的不變步驟將在抽像類中執行。

這種模式經常在需要時使用:

  • 單獨使用算法的不變部分,將變化部分留給繼承人自行決定。
  • 幾個類通用代碼的本地化和隔離以避免重複。
  • 允許繼承者僅在某些地方擴展代碼。

是的,這個模式描述了一對的使用:一個抽像類和它的實現。

2.4 責任鏈

責任鍊是一種行為設計模式,旨在組織系統中的責任級別。

責任鏈

建議在以下情況下使用該模板:

  • 在開發的系統中有一組對象可以處理某種類型的消息;
  • 所有消息必須至少由一個系統對象處理;
  • 系統中的消息根據“自己處理或傳遞給另一個”方案進行處理,即一些消息在接收到它們的級別進行處理,而另一些則轉發給另一級別的對象。

2.5 紀念品

Keeper (Memento)是一種行為設計模式,允許您在不違反封裝的情況下修復和保存對象的內部狀態,以便以後可以將其恢復到此狀態。

守護者(紀念品)

Guardian 模式用於以下情況:

  • 有必要保存對象(或部分)狀態的快照以供後續恢復;
  • 獲取對象狀態的直接接口暴露了實現細節並破壞了對象封裝。
1
任務
Module 3 a ɛto so abien,  等級 17課堂 1
上鎖
USB MP3 Player
task4118
1
任務
Module 3 a ɛto so abien,  等級 17課堂 1
上鎖
Strategic shopping
task4119
1
任務
Module 3 a ɛto so abien,  等級 17課堂 1
上鎖
Game of Life
task4120
1
任務
Module 3 a ɛto so abien,  等級 17課堂 1
上鎖
Technical Support
task4121
1
任務
Module 3 a ɛto so abien,  等級 17課堂 1
上鎖
Memento mori
task4122
留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言