概念:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
场景:代码中包含太多与对象状态有关的条件语句。
UML图:
示例:
水的状态
/**
* 水的状态
* */
public interface WaterState {
void changeState(Water water);
}
固态
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();
}
}
}
液态
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();
}
}
}
气态
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()+"摄氏度,气态;蒸汽,可以汗蒸了!");
}
}