设计形式-状态模式(state pattern)
设计模式----状态模式(state pattern)
LiftState.java代码如下:
ClosingState.java代码如下:
OpenningState.java代码如下:
RunningState.java代码如下:
StoppingState.java代码如下:
Context.java代码如下:
Client.java代码如下:
运行结果如下:
LiftState.java代码如下:
package com.designPattern.state; public abstract class LiftState { protected Context context; public abstract void open(); public abstract void close(); public abstract void run(); public abstract void stop(); public Context getContext() { return context; } public void setContext(Context context) { this.context = context; } }
ClosingState.java代码如下:
package com.designPattern.state; public class ClosingState extends LiftState{ @Override public void open() { super.context.setLiftState(Context.openningState); super.context.getLiftState().open(); } @Override public void close() { System.out.println("电梯门关闭"); } @Override public void run() { super.context.setLiftState(Context.runningState); super.context.getLiftState().run(); } @Override public void stop() { super.context.setLiftState(Context.stoppingState); super.context.getLiftState().stop(); } }
OpenningState.java代码如下:
package com.designPattern.state; public class OpenningState extends LiftState{ @Override public void open() { System.out.println("电梯门打开了"); } @Override public void close() { super.context.setLiftState(Context.closingState); super.context.getLiftState().close(); } @Override public void run() { } @Override public void stop() { } }
RunningState.java代码如下:
package com.designPattern.state; public class RunningState extends LiftState{ @Override public void open() { } @Override public void close() { } @Override public void run() { System.out.println("电梯上下跑"); } @Override public void stop() { super.context.setLiftState(Context.stoppingState); super.context.getLiftState().stop(); } }
StoppingState.java代码如下:
package com.designPattern.state; public class StoppingState extends LiftState{ @Override public void open() { super.context.setLiftState(Context.openningState); super.context.getLiftState().open(); } @Override public void close() { } @Override public void run() { super.context.setLiftState(Context.runningState); super.context.getLiftState().run(); } @Override public void stop() { System.out.println("电梯停止了"); } }
Context.java代码如下:
package com.designPattern.state; public class Context { public static final OpenningState openningState = new OpenningState(); public static final ClosingState closingState = new ClosingState(); public static final RunningState runningState = new RunningState(); public static final StoppingState stoppingState = new StoppingState(); private LiftState liftState; public LiftState getLiftState() { return liftState; } public void setLiftState(LiftState liftState) { this.liftState = liftState; this.liftState.setContext(this); } public void open(){ this.liftState.open(); } public void close(){ this.liftState.close(); } public void run(){ this.liftState.run(); } public void stop(){ this.liftState.stop(); } }
Client.java代码如下:
package com.designPattern.state; public class Client { public static void main(String[] args) { Context context = new Context(); context.setLiftState(new ClosingState()); context.open(); context.close(); context.run(); context.stop(); } }
运行结果如下:
电梯门打开了 电梯门关闭 电梯上下跑 电梯停止了