当前位置: 首页 > news >正文

写一个java状态模式的详细实例

以下是一个示例的 Java 状态模式实现:

java Copy code
// 定义状态接口
interface State {
    void handleState(Context context);
}

// 具体状态类 1
class ConcreteState1 implements State {
    public void handleState(Context context) {
        System.out.println("当前状态为状态 1");
        // 在状态 1 下执行相应的逻辑
    }
}

// 具体状态类 2
class ConcreteState2 implements State {
    public void handleState(Context context) {
        System.out.println("当前状态为状态 2");
        // 在状态 2 下执行相应的逻辑
    }
}

// 上下文类,用于维护当前状态并执行相应操作
class Context {
    private State currentState;

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

    public void request() {
        currentState.handleState(this);
    }
}

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

        // 设置初始状态为状态 1
        State state1 = new ConcreteState1();
        context.setCurrentState(state1);

        // 执行请求
        context.request();

        // 切换到状态 2
        State state2 = new ConcreteState2();
        context.setCurrentState(state2);

        // 执行请求
        context.request();
    }
}
在上述示例中,我们首先定义了一个 State 接口,它包含了状态的处理方法 handleState()。然后,我们创建了两个具体状态类 ConcreteState1 和 ConcreteState2 实现了 State 接口,并分别实现了自己的状态处理逻辑。

接下来,我们定义了一个上下文类 Context,它维护了当前状态并提供了一个公共方法 request() 用于执行相应的操作。在 Context 中,我们通过 setCurrentState() 方法设置当前状态,并在 request() 方法中调用当前状态的处理方法。

最后,在主程序中,我们创建了一个 Context 对象,并设置初始状态为状态 1。然后,调用 request() 方法执行相应的操作。随后,我们将状态切换为状态 2,并再次执行请求。

通过状态模式,我们可以实现基于不同状态的不同行为,避免了大量的条件语句和分支结构,提高了代码的可扩展性和可维护性。

相关文章:

  • 怎么实现Servlet的自动加载
  • 卸载了Visual Studio后,在vscode中执行npm i或npm i --force时报错,该怎么解决?
  • log4j学习
  • 鸿蒙开发中的坑(持续更新……)
  • cfa一级考生复习经验分享系列(十一)
  • 低时延,可扩展的 l4s 拥塞控制算法
  • MySQL——内置函数
  • 【SpringCloud笔记】(10)消息总线之Bus
  • 分支限界法求解01背包(优先队列)【java】
  • 2023年第七届强网杯初赛 WP
  • Python期末复习第一章——概述
  • vmware安装中标麒麟高级服务器操作系统 V7.0
  • 动物分类识别教程+分类释义+界面展示
  • 【排序算法】C语言实现选择排序与冒泡排序
  • OpenEuler安装内网穿透工具实现ssh连接openEuler系统
  • pip install multiprocessing报错子进程错误error: metadata-generation-failed
  • IP代理科普| 共享IP还是独享IP?两者的区别与优势
  • C++哈希表的实现
  • Anylogic Pro 8.8.x for Mac / for Linux Crack
  • DOM and XPATH
  • 经济日报:降准降息,提前还房贷划算吗?
  • 上任后首访,德国总理与法国总统举行会晤
  • 金球看淡,不服就干!这是抬不起腿却昂着头的劳塔罗
  • 央行行长:债券市场“科技板”准备工作基本就绪,目前近百家市场机构计划发行超三千亿科技创新债
  • 应对美政策调整:中国重在开放与创新,维护好数据主权
  • 马克思主义理论研究教学名师系列访谈|石书臣:思政课是落实立德树人的关键