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()+"摄氏度,气态;蒸汽,能够汗蒸了!");
    }
}