状态模式

简介: 定义在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

定义

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

实现

我们将创建一个 State 接口和实现了 State 接口的实体状态类。Context 是一个带有某个状态的类。
StatePatternDemo,我们的演示类使用 Context 和状态对象来演示 Context 在状态改变时的行为变化。

步骤 1
创建一个接口。
State.java
public interface State {
   public void doAction(Context context);
}
步骤 2
创建实现接口的实体类。
StartState.java
public class StartState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in start state");
      context.setState(this);   
   }

   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");
      context.setState(this);   
   }

   public String toString(){
      return "Stop State";
   }
}
步骤 3
创建 Context 类。
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;
   }
}
步骤 4
使用 Context 来查看当状态 State 改变时的行为变化。
StatePatternDemo.java
public class StatePatternDemo {
   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());
   }
}
步骤 5
验证输出。
Player is in start state
Start State
Player is in stop state
Stop State
相关文章
|
存储 NoSQL 网络安全
修改mongodb的连接参数
在MongoDB中,你可以通过连接字符串(connection string)来配置连接参数。连接字符串是一个包含连接信息的字符串,可以包括主机地址、端口、认证信息、数据库名等。 下面是一些常见的连接参数,你可以根据需要进行修改: 1. **主机地址(host):** MongoDB服务器的地址。可以是IP地址或主机名。 ```mongodb mongodb://localhost:27017 ``` 2. **端口号(port):** MongoDB服务器的端口号。默认端口号是27017。 ```mongodb mongodb://localhost:
612 1
|
XML Web App开发 存储
这个文件下载问题难住了我至少三位同事
这个文件下载问题难住了我至少三位同事
|
7月前
|
存储 人工智能 算法
《AI浪潮下,别让数据隐私与算法偏见拖后腿》
在数字化时代,AI技术融入生活各领域,带来便利的同时也引发数据隐私与算法偏见两大难题。数据隐私问题体现在数据收集、存储、传输和使用过程中,存在告知不明确、授权不充分等隐患;算法偏见源于训练数据偏差和设计缺陷,导致不公平结果。为应对这些挑战,需从技术、法律和伦理层面采取措施,确保AI健康发展,造福人类社会。
317 2
产品经理-面试问题(实习)
这份文档主要讨论了实习面试中的常见问题,指出市面上的“面试100问”多针对C端产品,而B端和G端产品的面试则更注重实际工作经验。文中列举了几个典型的实习面试问题,如介绍实习经历、遇到的困难及解决方法、最佳项目以及竞争优势等,并提供了回答这些问题的思路和建议。文档还引导读者查阅更多相关资料,如高频分级面试和初级面试问题。
|
10月前
|
人工智能 自然语言处理 IDE
💡通义灵码:让每个人都能成为软件开发的「超级个体」
作为阿里巴巴达摩院推出的先进大模型技术,通义灵码不仅具备强大的自然语言理解和生成能力,更支持多种编程语言和框架,能够广泛适用于不同的开发场景。这意味着,开发者可以借助通义灵码,通过自然语言进行代码生成、自动化测试、文档编写等,甚至还可以根据需求生成完整的项目结构和业务逻辑。
634 9
💡通义灵码:让每个人都能成为软件开发的「超级个体」
|
存储 C语言
用加法器实现补码的加/减运算
用加法器实现补码的加/减运算
505 0
|
11月前
|
机器学习/深度学习 数据采集 人工智能
文档智能 & RAG让AI大模型更懂业务
本次体验活动聚焦于文档智能与检索增强生成(RAG)技术结合构建的LLM知识库,重点测试了文档内容清洗、向量化、问答召回及Prompt上下文提供等环节。系统在自动化处理、处理效率和准确性方面表现出色,但在特定行业术语识别、自定义向量化选项、复杂问题处理及Prompt模板丰富度等方面仍有提升空间。
150 4
|
小程序 数据库
一分钟教你学会小程序云开发的数据库的增删改查
本文简要介绍了小程序云开发中数据库的增删改查操作。首先展示了查询代码,通过`wx.cloud.database().collection().get()`获取数据;接着演示添加数据,强调数据字段需与数据库匹配;然后说明删除数据需基于_id,通过`doc(id).remove()`执行;最后,更新数据同样依赖_id,使用`doc(id).update()`进行修改。
411 1
|
缓存 前端开发 API
toapi,一个强大的 Python Web API库!
toapi,一个强大的 Python Web API库!
222 5
|
Java 数据库连接 数据库
Mybatis-Pagehelper详细解析及优化插件开发
项目数据库数据量较大,分页查询要很久,所以要对分页优化,项目使用的分页是mybatis的Pagehelper,于是在Pagehelper的基础上进行了本次分页查询的优化