状态模式:当控制对象状态转换的条件或访问的资源过于复杂时,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断简化。
目标:就是把复杂的判断简化
概念:
有状态的对象:对像取决于一个或者多个动态变化的状态,状态改变时行为也随之改变。
适用情况:
1)
• 一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为(行为中可能涉及复杂的操作,访问不同模块的对象资源等……)。
2)
• 代码中包含大量与对象状态有关的条件语句
3:在有些情况下多个环境对象需要共享同一个状态,在系统中多个环境对象实例共享一个或多个状态对象(一般将这些状态对象定义为环境的静态成员对象)
结构组成:
环境类(客户):定义客户感兴趣的接口。维护多个ConcreteState子类的实例,每增加一种状态,环境类就要多增加一个实例。
抽象状态类:定义一组状态转换的算法的接口,让客户来调用接口。
实际情况中,可以将每种状态的子类设置单例或者在子状态类中必须包含上一个状态类的释放和下一个状态类申请。
子状态类中,简化只判断与自己关心的状态变哈,不管全部的状态。if (context.state == XXX) {……}
实例:
模式应用:
状态模式在工作流或游戏等类型的软件中得以广泛使用,甚至可以用于这些系统的核心功能设计,如在政府OA办公系统中,一个批文的状态有多种:尚未办理;正在办理;正在批示;正在审核;已经完成等各种状态,而且批文状态不同时对批文的操作也有所差异。使用状态模式可以描述工作流对象(如批文)的状态转换以及不同状态下它所具有的行为。
本文纯属个人学习总结,篇幅的大部分内容都来源于网络,每个人的水平、层次、出发点不同,阅读者可能存在一定的误解,希望提出建议共同交流
来源:CSDN
作者:cdz620
链接:https://blog.csdn.net/cdz620/article/details/47962839