您的位置:首页 > 编程语言 > Java开发

设计模式---状态模式Java示例实现

2016-11-07 17:17 746 查看
示例为电梯运行模拟,共有4个状态,打开,关闭,启动,停止。电梯在这四个状态之间切换。设计模式原理见设计模式 ( 十七) 状态模式State(对象行为型)

State.java

public interface State {

void stop(Lift lift);

void start(Lift lift);

void open(Lift lift);

void close(Lift lift);
}


OpenState.java

public class OpenState implements State {

@Override
public void stop(Lift lift) {

}

@Override
public void start(Lift lift) {

}

@Override
public void open(Lift lift) {
System.out.println("lift is opening");
}

@Override
public void close(Lift lift) {
final State state = new CloseState();
lift.setState(state);
state.close(lift);
}
}


CloseState.java

public class CloseState implements State {

@Override
public void stop(Lift lift) {

}

@Override
public void start(Lift lift) {
final State state = new StartState();
lift.setState(state);
state.start(lift);
}

@Override
public void open(Lift lift) {
final State state = new OpenState();
lift.setState(state);
state.open(lift);
}

@Override
public void close(Lift lift) {
System.out.println("lift is closing");
}


StopState.java

public class StopState implements State {

@Override
public void stop(Lift lift) {
System.out.println("lift is Stoping");
}

@Override
public void start(Lift lift) {
final State state = new StartState();
lift.setState(state);
state.start(lift);
}

@Override
public void open(Lift lift) {
final State state = new OpenState();
lift.setState(state);
state.open(lift);
}

@Override
public void close(Lift lift) {

}
}


StartState.java

public class StartState implements State {

@Override
public void stop(Lift lift) {
final State state = new StopState();
lift.setState(state);
state.stop(lift);
}

@Override
public void start(Lift lift) {
System.out.println("lift is starting");
}

@Override
public void open(Lift lift) {

}

@Override
public void close(Lift lift) {

}
}


Lift.java 电梯类,即设计模式中的 Context类

public class Lift {

public Lift(State state) {
this.state = state;
}

private State state;

public void setState(State state) {
this.state = state;
}

public void start() {
state.start(this);
}

public void open() {
state.open(this);
}

public void stop() {
state.stop(this);
}

public void close() {
state.close(this);
}
}


StateTest.java 测试类

public class StateTest {

@Test
public void test() {
Lift lift = new Lift(new CloseState());

lift.start();
lift.stop();
lift.open();
lift.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: