1700473010
运行的结果如下所示:
1700473011
1700473012
电梯门开启……
1700473013
1700473014
电梯门关闭……
1700473015
1700473016
电梯上下运行起来……
1700473017
1700473018
电梯停止了……
1700473019
1700473020
太简单的程序了!每个程序员都会写这个程序,这么简单的程序还拿出来显摆,是不是太小看我们的智商了?非也,非也,我们继续往下分析,这个程序有什么问题?你想想,电梯门可以打开,但不是随时都可以开,是有前提条件的。你不可能电梯在运行的时候突然开门吧?!电梯也不会出现停止了但是不开门的情况吧?!那要是有也是事故嘛,再仔细想想,电梯的这4个动作的执行都有前置条件,具体点说就是在特定状态下才能做特定事,那我们来分析一下电梯有哪些特定状态。
1700473021
1700473022
❑敞门状态
1700473023
1700473024
按了电梯上下按钮,电梯门开,这中间大概有10秒的时间,那就是敞门状态。在这个状态下电梯只能做的动作是关门动作。
1700473025
1700473026
❑闭门状态
1700473027
1700473028
电梯门关闭了,在这个状态下,可以进行的动作是:开门(我不想坐电梯了)、停止(忘记按路层号了)、运行。
1700473029
1700473030
❑运行状态
1700473031
1700473032
电梯正在跑,上下窜,在这个状态下,电梯只能做的是停止。
1700473033
1700473034
❑停止状态
1700473035
1700473036
电梯停止不动,在这个状态下,电梯有两个可选动作:继续运行和开门动作。
1700473037
1700473038
我们用一张表来表示电梯状态和动作之间的关系,如图26-2所示。
1700473039
1700473040
1700473041
1700473042
1700473043
图26-2 电梯状态和动作对应表(〇表示不允许,☆表示允许动作)
1700473044
1700473045
看到这张表后,我们才发觉,哦,我们的程序做得很不严谨,好,我们来修改一下,如图26-3所示。
1700473046
1700473047
1700473048
1700473049
1700473050
图26-3 增加了状态的类图
1700473051
1700473052
在接口中定义了4个常量,分别表示电梯的4个状态:敞门状态、闭门状态、运行状态、停止状态,然后在实现类中电梯的每一次动作发生都要对状态进行判断,判断是否可以执行,也就是动作的执行是否符合业务逻辑,实现类中有4个私有方法是仅仅实现电梯的动作,没有任何前置条件,因此这4个方法是不能为外部类调用的,设置为私有方法。我们先看接口的改变,如代码清单26-4所示。
1700473053
1700473054
代码清单26-4 电梯接口
1700473055
1700473056
public interface ILift{
1700473057
1700473058
//电梯的4个状态
1700473059
[
上一页 ]
[ :1.70047301e+09 ]
[
下一页 ]