public abstract class State {
public abstract void open ( ) ;
public abstract void close ( ) ;
public abstract void run ( ) ;
public abstract void stop ( ) ;
}
public class RunState extends State{
Context context;
public RunState ( Context context) {
this . context = context;
}
@Override
public void open ( ) {
System. out. println ( "电梯正在运行,不可以开门哦" ) ;
}
@Override
public void close ( ) {
System. out. println ( "电梯门关闭状态,无需再次关闭" ) ;
}
@Override
public void run ( ) {
System. out. println ( "电梯正在运行~~~" ) ;
}
@Override
public void stop ( ) {
System. out. println ( "电梯停止运行" ) ;
context. setState ( context. getStopState ( ) ) ;
}
}
public class OpenState extends State{
Context context;
public OpenState ( Context context) {
this . context = context;
}
@Override
public void open ( ) {
System. out. println ( "电梯门打开状态,无需再次打开" ) ;
}
@Override
public void close ( ) {
System. out. println ( "电梯门关闭" ) ;
context. setState ( context. getCloseState ( ) ) ;
}
@Override
public void run ( ) {
System. out. println ( "电梯门打开状态,不可以运行哦" ) ;
}
@Override
public void stop ( ) {
System. out. println ( "电梯门打开状态,不可以停止运行哦" ) ;
}
}
public class CloseState extends State{
Context context;
public CloseState ( Context context) {
this . context = context;
}
@Override
public void open ( ) {
System. out. println ( "电梯门打开" ) ;
context. setState ( context. getOpenState ( ) ) ;
}
@Override
public void close ( ) {
System. out. println ( "电梯门正在关闭~~~" ) ;
}
@Override
public void run ( ) {
System. out. println ( "电梯开始运行" ) ;
context. setState ( context. getRunState ( ) ) ;
}
@Override
public void stop ( ) {
System. out. println ( "电梯停止运行" ) ;
context. setState ( context. getStopState ( ) ) ;
}
}
public class StopState extends State{
Context context;
public StopState ( Context context) {
this . context = context;
}
@Override
public void open ( ) {
System. out. println ( "电梯门打开" ) ;
context. setState ( context. getOpenState ( ) ) ;
}
@Override
public void close ( ) {
System. out. println ( "电梯门关闭状态,无需再次关闭" ) ;
}
@Override
public void run ( ) {
System. out. println ( "电梯进入运行状态" ) ;
context. setState ( context. getRunState ( ) ) ;
}
@Override
public void stop ( ) {
System. out. println ( "电梯停止运行~~~" ) ;
}
}
public class Context {
State state;
State openState = new OpenState ( this ) ;
State closeState = new CloseState ( this ) ;
State runState = new RunState ( this ) ;
State stopState = new StopState ( this ) ;
public Context ( ) {
this . state = getStopState ( ) ;
}
public void run ( ) {
state. run ( ) ;
}
public void open ( ) {
state. open ( ) ;
}
public void stop ( ) {
state. stop ( ) ;
}
public void close ( ) {
state. close ( ) ;
}
public void setState ( State state) {
this . state = state;
}
public State getOpenState ( ) {
return openState;
}
public State getCloseState ( ) {
return closeState;
}
public State getRunState ( ) {
return runState;
}
public State getStopState ( ) {
return stopState;
}
}
public class Client {
public static void main ( String[ ] args) {
Context context = new Context ( ) ;
context. open ( ) ;
context. close ( ) ;
context. run ( ) ;
context. stop ( ) ;
context. run ( ) ;
context. open ( ) ;
}
}