介绍

当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类 -设计模式之禅第2版

状态模式可以分为三部分:状态,引起状态发生改变的事件,当前状态下进行的行为。
将这些抽象为角色的话,有

  • 状态:管理状态、环境,定义当前状态下的行为
  • 环境:定义可以切换的状态,进行切换状态

    实现

    类图

状态模式 - 图1

代码

状态

  1. package cn.zjm404.stu.dp.behavior.state;
  2. public abstract class AbstractState {
  3. protected Context context;
  4. public void setContext(Context _context){
  5. this.context = _context;
  6. }
  7. public abstract void handle();
  8. }
  1. package cn.zjm404.stu.dp.behavior.state;
  2. public class ConcreteState1 extends AbstractState{
  3. @Override
  4. public void handle() {
  5. System.out.println("hello world");
  6. }
  7. }
  1. package cn.zjm404.stu.dp.behavior.state;
  2. public class ConcreteState2 extends AbstractState{
  3. @Override
  4. public void handle() {
  5. System.out.println("HELLO WORLD");
  6. }
  7. }

环境

  1. package cn.zjm404.stu.dp.behavior.state;
  2. /**
  3. * 进行状态切换
  4. */
  5. public class Context {
  6. public final static AbstractState STATE1 = new ConcreteState1();
  7. public final static AbstractState STATE2 = new ConcreteState2();
  8. private AbstractState state;
  9. public void setState(AbstractState _state){
  10. this.state = _state;
  11. }
  12. public AbstractState getState(){
  13. return this.state;
  14. }
  15. public void handle(){
  16. this.state.handle();
  17. }
  18. }

Client

  1. package cn.zjm404.stu.dp.behavior.state;
  2. public class Client {
  3. public static void main(String[] args) {
  4. Context context = new Context();
  5. context.setState(Context.STATE1);
  6. context.handle();
  7. }
  8. }

参考