State 模式是壹種特殊形式的 Strategy 模式:Context 選擇的具體策略根據不同的 state 發生變化。
對於 Strategy 模式,可以基於不同的變量比如傳入的參數來決定選擇具體哪個策略,壹旦選擇確定後,直到 context 剩余的整個生命周期結束,該策略都保持不變。相反在 State 模式中,策略(或者在這裏的語境下,叫做 狀態 )在 context 的生命周期裏是動態變化的,從而允許對象的行為可以根據內部狀態的變化自適應地更改。
舉例來說,我們需要創建壹個賓館預定系統,由壹個 Reservation 類對預定房間的行為進行建模。
考慮如下壹系列事件:
參考上圖,可以實現 3 種 不同的策略,他們都實現了 confirm() 、 cancel() 、 delete() 這幾個方法。每種策略的具體邏輯由不同的狀態決定。 Reservation 對象只需要在每次狀態切換時,激活對應的策略。
package.json :
failsafeSocket.js :
上述 FailsafeSocket 類主要由以下幾個組件構成:
offlineState.js :
上述模塊負責定義 socket 處於離線狀態時的行為。
onlineState.js :
OnlineState 模塊實現了當 socket 處於在線狀態時的行為。
server.js :
client.js :
Node.js Design Patterns: Design and implement production-grade Node.js applications using proven patterns and techniques, 3rd Edition