内容简介:定义电梯接口实现书写场景类
模拟电梯
定义电梯接口
public interface ILift{
// 开门
public void open();
// 关门
public void close();
// 能运行
public void run();
// 停
public void stop();
}
实现
public class Lifi implements ILift{
// 关闭
public void close(){
// 关门
}
// 开门
public void open(){
// 开门
}
// 运行
public void run(){
// 运行
}
// 停止
public void stop(){
// 停止
}
}
书写场景类
public class Client{
public static void main(String[] args){
ILift lift = new Lift();
// 开门
lift.open();
// 关门
lift.close();
// 运行
lift.run();
// 停止
lift.stop();
}
}
更改
目前不清楚电梯的状态,所以增加电梯的状态
public interface ILift{
// 四个状态
// 开门
public final static int OPENING_STATE = 1;
// 关门
public final static int CLOSEING_STATE = 2;
// 运行
public final static int RUNNING_STATE = 3;
// 停止
public final static int STOPPING_STATE = 4;
// 设置状态
public void setState(int state);
// 下方相同
}
// 实现类
public class Lift implements ILift{
private int state;
public void setState(int state){
this.state = state;
}
// 当电梯门关闭
public void close(){
// 关闭
switch(this.state){
case OPENING_STATE; // 关门
this.closeWithoutLogic();
// 修改状态
}
}
// 下方同理
}
修改
对电梯的状态进行封装,当调用的时候,直接自动改变电梯的状态。
即,迪米特法则
即,外界不需要知道电梯的状态,为一个封装好的。
public abstract class LiftState{
// 定义环境角色
protected Context context;
// 设置状态
public void setContext(Context _context){
this.context = _context;
}
// 开门
public abstract void open();
// 关门
public abstract void close();
// 运行
public abstract void run();
// 停
public abstract void stop();
}
开门状态
public class OpenningState extends LiftState{
// 关门
@Override
public void close(){
// 状态更改
super.context.setLiftState(Context.closeingState);
// 委托执行
super.context.getLiftState().close();
}
// 打开电梯门
@Override
public void open(){
// 开门
}
// 运行
@Override
public void run(){
// 门开,禁止运行
}
// 关门
@Override
public void stop(){
// 开门的状态即停止
}
}
// 环境类,用于封装当前电梯的状态
public class Context{
// 定义电梯状态
public final static OpenningState openningState = new OpenningState();
// 剩下三个状态相同
// 当前状态
private LiftState liftState;
// 获得状态
public LiftState getLiState(){
return liftState;
}
// 设置状态
public LiftState setLiftState(LiftState liftState){
this.liftState = liftState;
// 通知到当前的状态
this.liftState.setContext(this);
}
}
剩下的几个相同
// 书写场景类
public class Client{
public static void main(String[] args){
// 此时定义一个电梯的状态
Context context = new Context();
// 此时电梯进入关闭状态
// 将关闭状态,保存进入context中
// 进行通知,将当前状态的父类设置为context
context.setLiFtState(new ClosingState());
// 代执行ClosingState
context.open();
// 发生关闭状态的时候,
context.close();
context.run();
context.stop();
}
}
总结
状态模式的核心在于封装,将对象的状态进行封装。
在于通知,当状态发生改变的时候,进行通知。
以上所述就是小编给大家介绍的《状态模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
编程珠玑(续)(修订版)
【美】Jon Bentley 乔恩•本特利 / 钱丽艳、刘田 / 人民邮电出版社 / 2015-2 / CNY 35.00
历史上最伟大的计算机科学著作之一 融深邃思想、实战技术与趣味轶事于一炉的奇书 带你真正领略计算机科学之美 多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位于前列。正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力,从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”,成为世界计算机界名刊《ACM通讯》历史上最受欢......一起来看看 《编程珠玑(续)(修订版)》 这本书的介绍吧!