状态模式很简单,无论是理解,还是实现,都很简单。
一、定义:
1,状态模式允许一个"对象"在其内部状态改变的时候改变其行为。
2,状态模式的角色:
抽象状态,具体状态,环境(context)角色
状态模式的大多数时候是为了解决if--else过多的问题的。当if-else过多时,若重新加入一种状态,会修改原来的代码。而使用状态模式,对原来的代码没有改动,只需添加新增的状态即可。
如下QQ状态例子:
抽象状态State.java
package State;
public abstract class State {
//对应状态下的操作
public abstract void printState();
}
具体状态FirstState.java
package State;
//上线状态
public class FirstState extends State{
public void printState() {
System.out.println("状态是上线");
}
}
具体状态SecondState.java
package State;
//隐身状态
public class SecondState extends State{
public void printState() {
System.out.println("状态是隐身");
}
}
具体状态:ThirdState.java
package State;
//离线状态
public class ThirdState extends State{
public void printState() {
System.out.println("状态是 离线");
}
}
环境Context.java
package State;
public class Context {
// context的当前状态
private State state;
public Context() {
this.state = new FirstState();
}
//设置状态
public void setState(State state) {
this.state = state;
}
//执行对应状态下的操作
public void execute() {
this.state.printState();
}
}
测试代码:Client.java
package State;
public class Client {
public Client() {
Context context = new Context();
context.execute();
context.setState(new SecondState());
context.execute();
context.setState(new ThirdState());
context.execute();
}
public static void main(String[] args) {
new Client();
}
}
分享到:
相关推荐
CPPC++_PCLPoint Cloud Library点云库学习记录
基于Python的百度百科爬虫
CPPC++_Qt 之 GUI 控件使用 网络 架构原理 运行机制理解DTK 重绘控件方式的框架解析IDE 技巧
10020
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
cppc++
2000d
Apache Kafka:Kafka集群运维与监控.docx
CPPC++_TNN是由腾讯优图实验室和光影实验室共同开发的一种面向移动桌面和服务器的统一深度学习推理框架,TNN具有
huluxia.apk
Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。 Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析可视化项目源码(期末大作业).zip,个人经导师指导并认可通过的98分大作业设计项目。主要针对计算机相关专业的正在做期末大作业设计的学生和需要项目实战练习的学习者,可作为课程设计、期末大作业,代码资料完整下载可用。Python商品销售数据分析
[CSP-J 2023] 小苹果的代码
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
基于SVM的简单机器学习分类,可以使用svm,knn,朴素贝叶斯,决策树四种机器学习方法进行分类
基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Python实现源码+文档说明(高分毕设)基于YOLOv5和PSPNet的实时目标检测和语义分割系统Pyt
CPPC++_通过carlarosbridge在carla上实现自动驾驶planning and control
cppc++
分布式事务管理