狀態模式

  • State 抽象狀態角色
    • 依賴環境角色 context
    • handler,handler2 ... hanlerN 多個狀態的業務邏輯
  • ConcreteState 具體狀態角色,一個類對應一種狀態
    • 針對每個狀態下,自己的業務邏輯handler
    • 其他的handler方法,先context.setCurrentState切換狀態,再調用context.handlerN方法
  • Context 環境角色
    • 多個 new ConcreteState 屬性
    • currentState 當前狀態屬性
    • setCurrentState(currentState) : 更新currentState屬性,更新currentState的context屬性
    • 對應抽象狀態的多個handler方法,委托給currentState對應的handler執行
context = new Context();
context.setCurrentState(new ConcreteState1()); // 初始化狀態1
context.handle1();  // 直接調用ConcreteState1.handler1()
context.handle2(); // 切換到ConcreteState2,調用handler2()。隱藏了狀態的變化

總結

優點

  1. 避免了過多的條件判斷,不過相應地狀態子類數量會增加
  2. 狀態修改只需要修改對應的狀態實現子類,增加狀態只要增加子類。
  3. 封裝了狀態的變化過程
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1 場景問題# 1.1 實現在線投票## 考慮一個在線投票的應用,要實現控制同一個用戶只能投一票,如果一個用戶反復...
    七寸知架構閱讀 1,969評論 7 53
  • 目錄 本文的結構如下: 引言 什么是狀態模式 模式的結構 典型代碼 代碼示例 狀態模式和策略模式的區別 優點和缺點...
    w1992wishes閱讀 781評論 0 6
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 凌晨給薄荷澆水 舍友養的茉莉花開了 好香 四點多起床 給朋友送行 繼續睡了
    你好呀自由閱讀 121評論 0 0
  • 生活從來不會辜負一個眼里充滿期待的行者,他會讓你變得愈加濃烈,愈加厚重。時隔經年,才發現自己所做的努力...
    calmlyleave閱讀 329評論 0 1