概念:当一个对象的内在状态改变时容许改变其行为,这个对象看起来像是改变了其类。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()+"摄氏度,气态;蒸汽,能够汗蒸了!"); } }