Java状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变它的行为。它通过将各种状态封装到不同的子类中来实现,从而使得对象在不同的情况下有不同的行为。
Java状态模式的一个典型应用是电梯(Elevator)控制器。电梯有多个不同的状态(例如“上升”、“下降”、“停止”、“打开门”和“关闭门”),并且根据当前的情况会有不同的行为。例如:当电梯处于上升状态时,它会一直上升直到到达顶部或者遇到一个请求停止的信号。
public interface ElevatorState { public void openDoor(); public void closeDoor(); public void moveUp(); public void moveDown(); }
public class ElevatorContext { private ElevatorState state; public ElevatorContext() { state = new StoppedState(); // set initial state to stopped state. } public void setState(ElevatorState state) { this.state = state; } public void openDoor() { state.openDoor(); } public void closeDoor() { state.closeDoor(); } public void moveUp() { state.moveUp(); } public void moveDown() { state.moveDown(); } }
在状态模式中,类行为基于其状态而改变。
状态模式是一种行为模式。
当使用状态模式时,我们创建各种状态对象和上下文对象,其行为随着其状态对象改变而变化。
interface State { public void doAction(Context context); } class StartState implements State { public void doAction(Context context) { System.out.println("In start state"); context.setState(this); } public String toString() { return "Start State"; } } class StopState implements State { public void doAction(Context context) { System.out.println("In stop state"); context.setState(this); } public String toString() { return "Stop State"; } } class PlayState implements State { public void doAction(Context context) { System.out.println("In play state"); context.setState(this); } public String toString() { return "Play State"; } } class Context { private State state; public Context() { state = null; } public void setState(State state) { this.state = state; } public State getState() { return state; } } public class Main { public static void main(String[] args) { Context context = new Context(); StartState startState = new StartState(); startState.doAction(context); System.out.println(context.getState().toString()); PlayState playState = new PlayState(); playState.doAction(context); StopState stopState = new StopState(); stopState.doAction(context); System.out.println(context.getState().toString()); } }
上面的代码生成以下结果。
Java面向对象设计 - Java方法类中的方法定义对象的行为。方法是一个命名的代码块。调用方法的代码是方法的调用者。可选地,方法...
Java面向对象设计 -Java主要方法让我们讨论我们用来运行我们的类的main()方法。main()方法声明如下:public staticvoidmain(Strin...
Java面向对象设计 -Java访问级别成员类可以是public或default(或包级别)。类成员的访问级别确定程序的哪个区域可以访问它。以下...
Java面向对象设计 - Java Object类Java在java.lang包中有一个Object类。所有Java类都直接或间接扩展Object类。所有Java类都是Obj...