state - 對象行爲模式

    1.意圖
     允許一個對象在其內部狀態改變的時候改變它的行爲,對象看起來似乎下修改了它的類
     2.參與者
     Context - 定義客戶感興趣的接口
             - 維護一個ConcreteState子類的實例,這個實例定義當前狀態
     State  - 定義一個接口以封裝與context的一個特定狀態的行爲
     ConcreteState - 每個子類實現一個與Context的一個狀態相關的行爲

    3.結構

4.代碼

public interface State {
	public int handle(Context c,int num);
}

public class ConcreteState implements State {
	@Override
	public int handle(Context c,int num) {
		if(0<num && num<11){
			return 20;
		}else{
			c.changeState(new ConcreteState2());
			return c.request(num);
		}
	}

}

public class ConcreteState2 implements State {
	@Override
	public int handle(Context c,int num) {
		
		if(10<num && num<21){
			return 15;
		}else{
			c.changeState(new ConcreteState3());
			return c.request(num);
		}
	}

}
public class ConcreteState3 implements State {
	@Override
	public int handle(Context c,int num) {
		if(20<num && num<31){
			return 10;
		}else{
			c.changeState(new ConcreteState4());
			return c.request(num);
		}

	}

}

public class ConcreteState4 implements State {
	@Override
	public int handle(Context c,int num) {
			return 5;
	}

}

public class Context {
	private State state;
	/***
	 * 
	 * @param state 根據不同的糖果數量定義價格 1-10  20塊  11-20  15塊  21-30 10塊  31 5塊 
	 */

	Context(State state) {
		this.state = state;
	}

	public void changeState(State state) {
		this.state = state;
	}

	public int request(int num){
		return state.handle(this,num);
	}

	
	
}

public class Client {
	public static void main(String[] args) {
		Context c = new Context(new ConcreteState());
		System.out.println(c.request(50));
	}
}

 

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