状态模式

状态模式是一种设计模式,用于管理对象在不同状态下的行为。它通过将状态转换逻辑封装在独立的类中,使对象在内部状态改变时能够改变其行为。本文详细介绍了状态模式的定义、实现方式,包括状态枚举、状态类接口和状态机类的实现,并探讨了其在分支逻辑法、查表法和状态模式三种不同场景下的应用。在复杂状态管理如游戏开发中,查表法可能更为适用,而在状态不多但业务逻辑复杂的场景如电商下单,状态模式则更优。
摘要由CSDN通过智能技术生成

设计模式

本系列文章均是博主原创,意在记录学习上的知识,同时一起分享学习心得。

24种设计模式



前言

本章介绍状态模式的定义、实现方式和使用场景。


一、定义

有限状态机,英文翻译是Finite State Machine,缩写FSM,简称为状态机。状态机有3个组成部分:状态(State)、事件(Event)、动作(Action)。其中,事件也称为转移条件(Transaction Condition)。事件触发状态的转移及动作的执行。不过,动作不是必须的,也可能只转移状态,不执行任何动作。

二、实现方式

状态机的实现方式:

  • 定义一个状态枚举类,确定有多少种状态。
  • 定义一个状态类接口,并定义好所有事件方法、获取状态的方法。
  • 定义一个状态机类,状态机定义成员状态变量。
  • 实现状态类接口。

代码如下(示例):

public enum State {
   
    SMALL(1),
    SUPER(2),
    FIRE(3),
    CAPE(4);

    private int value;

    State(int value) {
   
        this.value = value;
    }

    public int getValue() {
   
        return value;
    }

}
public interface IMario {
   
    State getName();
    void obtainMushRoom(MarioStateMachine marioStateMachine);
    void obtainCape(MarioStateMachine marioStateMachine);
    void obtainFireFlower(MarioStateMachine marioStateMachine);
    void meetMonster(MarioStateMachine marioStateMachine);
}
public class MarioStateMachine {
   
    private int score;
    private IMario currentState;

    @Override
    public String toString() {
   
        return "MarioStateMachine{" +
                "score=" + score +
                ", currentState=" + currentState.getName().getValue() +
                '}';
    }

    public MarioStateMachine() {
   
        this.score = 0;
        this.currentState = SmallMario.getInstance();
    }

    public void obtainMushRoom() {
   
        this.currentState.obtainMushRoom(this)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值