设计形式-状态模式(state pattern)

设计模式----状态模式(state pattern)
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();
	}

}



运行结果如下:
电梯门打开了
电梯门关闭
电梯上下跑
电梯停止了