前言
想要了解更多文档知识,请点击 昂焱数据(www.ayshuju.com)
状态模式
1.1、概述
【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。
类图如下:

1.1.1、代码如下
1.1.1.1、ILift
/**
* @version v1.0
* @ClassName: ILift
* @Description: 电梯接口
*/
public interface ILift {
//定义四个电梯状态的常量
int OPENING_STATE = 1;
int CLOSING_STATE = 2;
int RUNNING_STATE = 3;
int STOPPING_STATE = 4;
//设置电梯状态的功能
void setState(int state);
//电梯操作功能
void open();
void close();
void run();
void stop();
}
1.1.1.2、Lift
/**
* @version v1.0
* @ClassName: Lift
* @Description: 电梯类(ILift的子实现类)
*/
public class Lift implements ILift {
//声明一个记录当前电梯的状态
private int state;
public void setState(int state) {
this.state = state;
}
public void open() {
switch (state) {
//当前电梯状态
case OPENING_STATE :
//什么事都不做
break;
case CLOSING_STATE :
System.out.println("电梯打开了...");
//设置当前电梯状态为开启状态
setState(OPENING_STATE);
break;
case STOPPING_STATE :
System.out.println("电梯打开了...");
//设置当前电梯状态为开启状态
setState(OPENING_STATE);
break;
case RUNNING_STATE :
//什么事都不做
break;
}
}
public void close() {
switch (this.state) {
case OPENING_STATE:
System.out.println("电梯关门了。。。");//只有开门状态可以关闭电梯门,可以对应电梯状态表来看
this.setState(CLOSING_STATE);//关门之后电梯就是关闭状态了
break;
case CLOSING_STATE:
//do nothing //已经是关门状态,不能关门
break;
case RUNNING_STATE:
//do nothing //运行时电梯门是关着的,不能关门
break;
case STOPPING_STATE:
//do nothing //停止时电梯也是关着的,不能关门
break;
}
}
public void run() {
switch (this

文章介绍了如何使用状态模式来改进电梯控制系统的代码,原始代码中大量使用了switch...case语句,降低了可读性和可扩展性。状态模式通过将每个状态的行为封装到单独的类中,提高了代码的结构和可维护性。文章展示了如何创建抽象状态类和具体状态类(如OpeningState,ClosingState等),以及环境类(Context)来管理当前状态并执行相应操作。状态模式使得添加新状态变得更加容易,同时也简化了状态转换的逻辑。然而,该模式可能会增加系统类的数量,且实现复杂,需要谨慎使用。适用场景包括对象行为取决于其状态的情况,或者需要根据状态改变行为的复杂条件分支结构。
最低0.47元/天 解锁文章
1780

被折叠的 条评论
为什么被折叠?



