java設計模式之狀態模式

概念:當一個對象的內在狀態改變時容許改變其行爲,這個對象看起來像是改變了其類。java

容許對象在內部狀態發生改變時改變它的行爲,對象看起來好像修改了它的類。ide

場景:代碼中包含太多與對象狀態有關的條件語句。ui

UML圖:code

示例:對象

水的狀態blog

/**
 * 水的狀態
 * */
public interface WaterState {
    void changeState(Water water);
}

固態get

package model.state.water;

/**
 * 描述:
 * 固態
 *
 * @author shilvfei
 * @create 2018-07-01 22:33
 */
public class SolidState implements WaterState {
    @Override
    public void changeState(Water water) {
        if(water.getTemperature()<=0){
            System.out.println("達到"+water.getTemperature()+"攝氏度,固態;能夠吃冰棒了");
        }else{
            water.setWaterState(new LiquidState());
            water.changeState();
        }
    }
}

液態class

package model.state.water;

/**
 * 描述:
 *
 * @author shilvfei
 * @create 2018-07-01 22:32
 */
public class LiquidState implements WaterState {
    @Override
    public void changeState(Water water) {
        if(water.getTemperature()<100){
            System.out.println("達到"+water.getTemperature()+"攝氏度,液態;喝水了!");
        }else{
            water.setWaterState(new GasState());
            water.changeState();
        }
    }
}

氣態model

package model.state.water;

/**
 * 描述:
 * 氣態
 *
 * @author shilvfei
 * @create 2018-07-01 22:24
 */
public class GasState implements WaterState {
    @Override
    public void changeState(Water water) {
      System.out.println("達到"+water.getTemperature()+"攝氏度,氣態;蒸汽,能夠汗蒸了!");
    }
}