設計模式—— 二.狀態模式 (1)

概念

          狀態模式 = 策略模式 + ‘狀態’。

          類的行爲基於它的狀態改變而改變。

 

 

例子

          

package mytest.stateDemo;

public class Context {

	   //持有一個State類型的對象實例
       private State state;

        public Context(State state){
	        	this.state = state;
	        }
	
		public void setState(State state) {
			this.state = state;
		}
		
		//這裏調用狀態的方法
		public void handle() {
			//轉調state來處理
			this.state.handle(this);
		}

}

 

package mytest.stateDemo;

public interface State {
	 //狀態對應的處理
	public void handle(Context context);

}
package mytest.stateDemo;
//具體狀態類A
public class ConcreteStateA  implements State{

	
	@Override
	public void handle(Context context) {

        System.out.println("現在是在狀態A");
         //這裏是重點,在策略模式中沒有這個步驟,這裏就是區別於策略模式的地方,重新設置了State的狀態,也就是改變了狀態
		context.setState(new ConcreteStateB());
	}

}
package mytest.stateDemo;
//具體狀態類B
public class ConcreteStateB  implements State{

	@Override
	public void handle(Context
			 context) {
		
		System.out.println("現在是在狀態B");
		context.setState(new ConcreteStateA());
	}


}
package mytest.stateDemo;

public class Client {

	public static void main(String[] args) {
		//創建狀態
		State state = new ConcreteStateA();
		//創建環境
		Context context = new Context(state);
		context.handle();
		context.handle();
		context.handle();
		context.handle();
		context.handle();
	}
	
}

輸出結果:

現在是在狀態A
現在是在狀態B
現在是在狀態A
現在是在狀態B
現在是在狀態A

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章