java 设计模式_行为型_23状态模式

23.状态模式

Java中的状态设计模式是一种软件设计模式,当对象的内部状态更改时,该模式允许对象更改其行为。状态设计模式通常用于以下情况:对象取决于其状态,并且在运行期间必须根据其内部状态更改其行为。状态设计模式是许多行为设计模式之一,因此表征了运行时难以遵循的对象之间的控制流。状态封装是管理软件变更的绝佳方法。在本文中,我们将讨论状态设计模式动机的关键方面,描述状态动机,提及实现该动机的关键参与者,并使用代码示例来演示其用法。

Java中的状态设计模式示例

在继续演示Java状态设计模式的代码示例之前,让我们首先了解什么是我们需要更好理解示例的关键类(参与者)。

上下文界面

上下文定义一个接口,该接口维护定义当前状态的ConcreteState子类的实例。

状态界面

状态定义了一个接口,用于封装与上下文的特定状态关联的行为。

ConcreteState子类

如前所述,具体状态子类可以被视为连接对象处于(建立,聆听或关闭)状态的实例。它们实现了上下文状态的行为。

Java示例中的状态设计模式

我们将演示游戏开始和暂停功能的高度简化版本。实现如下:

UML用例图

1、状态界面

java 复制代码
public interface State {
    void doAction(Context context);
}

2.上下文

java 复制代码
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Context {
    private State state;


}

3.具体状态

java 复制代码
public class StartState implements State {


    @Override
    public void doAction(Context context) {
        System.out.println("Game start");
        context.setState(this);
    }


    public String toString(){
        return "start";
    }
}


public class StopState implements State {
    @Override
    public void doAction(Context context) {
        System.out.println("Game pause");
        context.setState(this);
    }


    public String toString(){
        return "stop";
    }


}

4.测试类

java 复制代码
public class StateTest {
    public static void main(String[] args) {
        Context context = new Context();
        StartState 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());
    }
}
相关推荐
武子康4 分钟前
Java-163 MongoDB 生产安全加固实战:10 分钟完成认证、最小权限、角色详解
java·数据库·分布式·mongodb·性能优化·系统架构·nosql
ZIM学编程15 分钟前
「学长有话说」作为一个大三学长,我想对大一计算机专业学生说这些!
java·c语言·数据结构·c++·python·学习·php
Dolphin_Home21 分钟前
轻量实用的 XML 与 JSON / 对象互转工具类(Jackson 实现)
xml·java·json
Yeniden38 分钟前
【设计模式】# 外观模式(Facade)大白话讲解!
java·设计模式·外观模式
脚踏实地的大梦想家38 分钟前
【Go】P17 Go语言并发编程核心:深入理解 Goroutine (从入门到实战)
java·开发语言·golang
Yeniden38 分钟前
【设计模式】 组合模式(Composite)大白话讲解
java·设计模式·组合模式
初学小白...43 分钟前
线程同步机制及三大不安全案例
java·开发语言·jvm
CS Beginner1 小时前
【搭建】个人博客网站的搭建
java·前端·学习·servlet·log4j·mybatis
JavaTree20172 小时前
【Spring Boot】Spring Boot解决循环依赖
java·spring boot·后端
lang201509282 小时前
Maven 五分钟入门
java·maven