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
1700473404
1700473405
public void close(){
1700473406
1700473407
//状态修改
1700473408
1700473409
super.context.setLiftState(Context.closeingState);
[
上一页 ]
[ :1.70047336e+09 ]
[
下一页 ]