设计模式学笔记本--状态模式

本文介绍状态模式(StatePattern)的概念及其在软件开发中的应用。状态模式允许对象根据内部状态的变化来改变其行为,通过定义一系列的状态类来减少条件判断语句。文章详细展示了状态模式的实现过程,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二十一、状态模式

状态模式(State Pattern),类的行为是基于它的状态改变的,需要创建一个表示各种状态的对象以及一个行为随着状态对象变化而改动的对象。

简介

状态模式允许对象在内部状态发生变化时候改变它的行为,通过条件语句来判定。
- 优点:封装了转换规则、通过枚举状态便捷的扩展新状态和行为。共享对象,减少系统中对象个数。
- 状态模式的使用会增加系统的类及对象个数。实现复杂,不易准确构建。开闭原则的支持不太好。

实现

创建一State接口和它的实现类,Context是一个带有状态的行为类。
state
- 创建接口

State.java

public interface State {
  public void doAction(Context context);
}
  • 创建接口实现类

StartState.java

public class StartState implements State {
  public void doAction(Context context){
    System.out.println("Player is in start state");
  }
  public String toString(){
    return "Start State";
  }
}

StopState.java

public class StopState implements State {
  public void doAction(Context context){
    System.out.println("Player is in stop state");
  }
  public String toString(){
    return "Stop State";
  }
}
  • 创建行为类

Context.java

public class Context {
  private State state;

  public Context(){
    state =null;
  }

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

  public State getState(){
    return state;
  }
}
  • 演示

StatePatternDemo.java

public class StatePatternDemo {
  public static void main(String[] args){
    Context context = new Context();

    State startState = new StartState();
    startState.doAction(context);

    System.out.println(context.getState().toString());

    StopState stopState = new StopState();
    stopState.doAction(context);

    System.out.println(context.getState().toString());
  }
}
  • 输出
Player is in start state
Start State
Player is in stop state
Stop State
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值