1. 程式人生 > >Java中的狀態模式例項教程

Java中的狀態模式例項教程

狀態模式是一種行為設計模式。適用於當物件的內在狀態改變它自身的行為時。

如果想基於物件的狀態來改變自身的行為,通常利用物件的狀態變數及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();
 }

}

注意:客戶端程式碼需要知道每一個不同的值所代表的遙控器的不同狀態。如果這樣,假如大量的狀態被增加,那麼對於被緊緊捆綁在一起的狀態實現以及相應的客戶端程式碼,它們的維護及擴充套件就變得非常困難。

現在使用狀態模式實現上述電視控制器。