Java中的狀態模式例項教程
阿新 • • 發佈:2018-12-23
狀態模式是一種行為設計模式。適用於當物件的內在狀態改變它自身的行為時。
如果想基於物件的狀態來改變自身的行為,通常利用物件的狀態變數及if-else條件子句來扮演針對物件的不同行為。狀態模式Context(環境)和State(狀態)分離的方式既保證狀態與行為的聯動變化,又使得這種變化是條理明晰且鬆耦合的。
Context是包含了狀態引用的類,此引用指向一個狀態的具體實現。並且幫助把對狀態的請求委託給此狀態的物件進行處理。看一個具體的例子。
假如想實現電視遙控器,使用簡單按鍵來表現動作。如果狀態是ON,電視將被開啟,如果狀態是OFF,電視將被關閉。
利用if-else條件子句來實現。
package com.journaldev.design.state; public class TVRemoteBasic { private String state=""; public void setState(String state){ this.state=state; } public void doAction(){ if(state.equalsIgnoreCase("ON")){ System.out.println("TV is turned ON"); }else if(state.equalsIgnoreCase("OFF")){ System.out.println("TV is turned OFF"); } } public static void main(String args[]){ TVRemoteBasic remote = new TVRemoteBasic(); remote.setState("ON"); remote.doAction(); remote.setState("OFF"); remote.doAction(); } }
注意:客戶端程式碼需要知道每一個不同的值所代表的遙控器的不同狀態。如果這樣,假如大量的狀態被增加,那麼對於被緊緊捆綁在一起的狀態實現以及相應的客戶端程式碼,它們的維護及擴充套件就變得非常困難。
現在使用狀態模式實現上述電視控制器。