打字猴:1.700473354e+09
1700473354 我们再来分析其他3个状态,也都是一样的结果,我们只要实现电梯在一个状态下的两个任务模型就可以了:这个状态是如何产生的,以及在这个状态下还能做什么其他动作(也就是这个状态怎么过渡到其他状态),既然我们以状态为参考模型,那我们就先定义电梯的状态接口,类图如图26-4所示。
1700473355
1700473356
1700473357
1700473358
1700473359 图26-4 以状态作为导向的类图
1700473360
1700473361 在类图中,定义了一个LiftState抽象类,声明了一个受保护的类型Context变量,这个是串联各个状态的封装类。封装的目的很明显,就是电梯对象内部状态的变化不被调用类知晓,也就是迪米特法则了(我的类内部情节你知道得越少越好),并且还定义了4个具体的实现类,承担的是状态的产生以及状态间的转换过渡,我们先来看LiftState代码,如代码清单26-7所示。
1700473362
1700473363 代码清单26-7 抽象电梯状态
1700473364
1700473365 public abstract class LiftState{
1700473366
1700473367 //定义一个环境角色,也就是封装状态的变化引起的功能变化
1700473368
1700473369 protected Context context;
1700473370
1700473371 public void setContext(Context_context){
1700473372
1700473373 this.context=_context;
1700473374
1700473375 }
1700473376
1700473377 //首先电梯门开启动作
1700473378
1700473379 public abstract void open();
1700473380
1700473381 //电梯门有开启,那当然也就有关闭了
1700473382
1700473383 public abstract void close();
1700473384
1700473385 //电梯要能上能下,运行起来
1700473386
1700473387 public abstract void run();
1700473388
1700473389 //电梯还要能停下来
1700473390
1700473391 public abstract void stop();
1700473392
1700473393 }
1700473394
1700473395 抽象类比较简单,我们先看一个具体的实现——敞门状态的实现类,如代码清单26-8所示。
1700473396
1700473397 代码清单26-8 敞门状态
1700473398
1700473399 public class OpenningState extends LiftState{
1700473400
1700473401 //开启当然可以关闭了,我就想测试一下电梯门开关功能
1700473402
1700473403 @Override
[ 上一页 ]  [ :1.700473354e+09 ]  [ 下一页 ]