優勢:spa
① 將與特定狀態相關的行爲局部化,而且將不一樣狀態的行爲分割開。code
缺點:對象
① 可能出現大量狀態類。blog
適用範圍:排序
當一個對象的行爲取決於他的狀態,並且他必須在運行時刻根據狀態改變他的行爲,就要考慮此模式。事件
一個操做中含有龐大的分支機構,而且這些分支決定於對象的狀態。it
客戶端: class
Work work = new Work();//初始化給work狀態賦值
work.setHour(9); //給work時間賦值
work.writeProgram(); //判斷現狀
work.setHour(19); //給work時間賦值方法
work.setFinsh(true); //打斷的事件,工做完成便可下班,沒必要再繼續加班im
work.writeProgram(); //判斷現狀
一句話歸納:
根據不一樣的工做時間,自動切換顯示不一樣的狀態,如上午精神,下午疲憊等
/** * State (狀態是抽象類) * ForenoonState NoonState AfternoonState EveningState RestState SleepState -- 基本按時間段順序固定排序 * (各自實例化State,根據時間範圍及相關條件來判斷是否處於當前狀態,若不是,則轉入下一個時間段的狀態。) * * Work (設置開始狀態、設置時間、進入序列判斷顯示現狀等方法) * */