定义(百度百科):
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
UML类图:
具体代码:
public abstract class State { public abstract void handle(); } public class ConcreteState extends State { @Override public void handle() { } } public class ConcreteState extends State { @Override public void handle() { } }
模块说明:
Context:它定义了客户需要的接口并维护一个具体状态角色(State)的实例,将与状态相关的操作交给当前的ConcreteState对象来处理
State:定义一个接口以封装使用Context的的一个特定状态相关的行为
ConcreteState:实现抽象状态State的具体实例
适用场景:
对象状态的改变将导致行为的变化。
代码中包含非常多状态判断的语句,导致客户类与类库之间的耦合增强
优缺点:
优点:
简化应用逻辑控制(对状态的控制)
更好的区分状态和行为
缺点:
状态模式的使用必然会增加系统中ConcreteState的个数,导致系统运行开销增大
总结:
根据状态分离和选择行为