概念:當一個對象的內在狀態改變時容許改變其行爲,這個對象看起來像是改變了其類。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()+"攝氏度,氣態;蒸汽,能夠汗蒸了!"); } }