美文网首页java设计模式笔记
设计模式二十二--状态模式

设计模式二十二--状态模式

作者: 朽木亦自雕 | 来源:发表于2019-04-03 14:19 被阅读0次

定义

当一个状态在内部状态改变时允许改变行为,这个对象看起来像改变了类型。

状态模式的角色

1:抽象状态角色(State)
该角色用以封装环境对象的一个特定状态对应的行为。

public abstract class State{
  protected Context context;
  public void setContext(Context context){
    this.context = context;
  }
  public abstract void handle();
}

2:具体状态角色(ConcreteState)
该角色实现环境的一个状态所对应的行为。

public class ConcreteState1 extends State{
  @Override
  public void handle(){
    System.out.println("行为1")
  }
}
public class ConcreteState2 extends State{
  @Override
  public void handle(){
    System.out.println("行为2")
  }
}

3:环境角色(Context)
该角色定义客户端需要的接口,并负责具体状态切换,它会保留一个具体状态类的实例,该实例给出环境对象的现有状态。

public class Context{
  public static State STATE1 = new ConcreteState1();
  public static State STATE2 = new ConcreteState2();

  private State currentState;

  public State getCurrentState(){
    return this.currentState;
  }
  public void setCurrentState(State currentState){
    this.currentState = currentState;
  }
  public void handle1(){
    tis.setCurrentState(STATE1);
    this.currentState.handle();
  }
  public void handle2(){
    this.setCurrentState(STATE2);
    this.currentState.handle();
  }
}

客户端代码:

public class Client{
  public static void main(String [] args){
    Context context = new Context();
    context.handle1();
    context.handle2();
  }
}

优点

1:结构清晰。
2:遵循设计模式。
3:封装性非常好。

缺点

子类太多,不易于管理。需要对每一个可能取得的状态,创建一个子类,并且要在Context中创建对应的调用handle方法。

使用场景

1:对象的行为依赖于它所处的状态,即行为随着状态改变的场景。
2:对象在某个方法中依赖于一重或者多重分支语句,此时可以使用状态模式,将分支语句中的每一个分支都包装到一个单独的类中,使得这些条件语句能够以类的方式独立存在和演化。

参考资料:设计模式(java)

相关文章

  • 设计模式二十二--状态模式

    定义 当一个状态在内部状态改变时允许改变行为,这个对象看起来像改变了类型。 状态模式的角色 1:抽象状态角色(St...

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • 设计模式(二十二)状态模式(State)

    意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 适用性:一个对象的行为取决于它的状...

  • 设计模式——状态模式

    设计模式——状态模式 在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 优点: 减少...

  • 设计模式-状态设计模式

    1.定义 对于某个操作,由于其状态的不同,表现出的行为会不同(如遥控器进行音量增加的操作,在电视是开机状态下是可以...

  • 设计模式——状态模式

    前言 设计模式是指导一个程序猿以更好的姿态处理一些问题,而不再像刚学编程的我们,只会使用if-else分支语句,或...

  • 设计模式--状态模式

    基本常识:策略模式与状态模式是双胞胎,在出生时才分开。 假设公司有个糖果机,1当糖果机由糖果,投入25分钱,转动曲...

  • 设计模式——状态模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Patte...

  • 设计模式《状态模式》

    引言   上一节我们说了策略模式。这一节我们讲讲策略模式的双胞胎弟弟:状态模式,这个模式大家可能不常见,也不常用,...

  • 设计模式——状态模式

    定义 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行...

网友评论

    本文标题:设计模式二十二--状态模式

    本文链接:https://www.haomeiwen.com/subject/kxtclqtx.html