java状态模式例子答案_[转载]java设计模式_状态模式(带例子)

状态模式(STATE)

Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,State(状态)模式是比较常用的一个模式.

应用场景:如果需要在 1、不同的状态(可能会对应相应的行为),

2、不同的行为;

间反复进行切换,则应优先考虑状态模式。

在此写了7个java类来描述说明State设计模式;

1、State.java 状态接口

2、StateA.java 状态A

3、StateB.java 状态B

4、StateC.java 状态C

5、StateD.java 状态D

6、StateManager.java 状态管理类

7、StateTest.java 带有main方法的测试类

=============== 1、State.java 状态接口

public interface State {

//执行'上一步' 操作

public void lastStep(StateManager c);

//执行'下一步' 操作

public void nextStep(StateManager c);

}

=============== 1

end

=============== 2、StateA.java 状态A

public class StateA implements State {

//A->C

public void lastStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateC());

}

//A->B

public void nextStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateB());

}

@Override

public String toString() {

// TODO

Auto-generated method stub

return

"State A";

}

}

=============== 2

end

=============== 3、StateB.java 状态B

public class StateB implements

State {

//B->A

public void lastStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateA());

}

//B->C

public void nextStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateC());

}

@Override

public String toString() {

// TODO

Auto-generated method stub

return

"State B";

}

}

=============== 3

end

=============== 4、StateC.java 状态C

public class StateC implements

State {

//C->null(end)

public void lastStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(null);

}

//C->D

public void nextStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateD());

}

@Override

public String toString() {

// TODO

Auto-generated method stub

return

"State C";

}

}

=============== 4

end

=============== 5、StateD.java 状态D

public class StateD implements

State {

//D->B

public void lastStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(new StateB());

}

//D->nlll(end)

public void nextStep(StateManager c) {

// TODO

Auto-generated method stub

c.setState(null);

}

@Override

public String toString() {

// TODO

Auto-generated method stub

return

"State D";

}

}

=============== 5

end

=============== 6、StateManager.java 状态管理类

public class StateManager {

//状态

private State state;

//没有状态的构造器(不可见)

private StateManager(){}

//带有初始状态的构造器

public StateManager(State initState){

this.state =

initState;

}

//设置初始状态

public void setState(State state) {

this.state =

state;

}

//下一步

public void nextStep(){

if(this.state != null)

this.state.nextStep(this);

}

//上一步

public void lastStep(){

if(this.state != null)

this.state.lastStep(this);

}

//返回下一个状态

public State nextState(){

return

this.state;

}

}

=============== 6 end

=============== 7、StateTest.java 状态测试类

public class StateTest {

public static

void main(String[] args) {

// TODO

Auto-generated method stub

//顺行起点A

State state

= new StateA();

StateManager

controller = new StateManager(state);

for (int i =

0; i < 6; i++) {

state = controller.nextState();

System.out.print(state);

if(state == null) break;

System.out.print("->");

//顺流

controller.nextStep();

}

System.out.println("");

//顺行起点D

State

converseState = new StateD();

controller =

new StateManager(converseState);

for (int i =

0; i < 6; i++) {

state = controller.nextState();

System.out.print(state);

if(state == null) break;

System.out.print("->");

//逆流

controller.lastStep();

}

}

}

=============== 7

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值