轻松掌握Java状态模式

 更新时间:2016年09月29日 10:41:56   作者:断了联系  
这篇文章主要帮助大家轻松掌握Java状态模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

定义:在状态模式(State Pattern)中,类的行为是基于它的状态改变的。

特点:

1、封装了转换规则。

2、枚举可能的状态,在枚举状态之前需要确定状态种类。

3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。

4、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。

5、可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

企业及开发和常用框架中的应用:

实例:

public class Demo {

 public static void main(String[] args) {
 Context context = new Context();
 State move = new Move();
 move.show(context);
 State stop = new Stop();
 stop.show(context);
 }
}

class Context{
 private State state;
 
 public void setState(State state){
 System.out.println("给物体加持状态");
 this.state = state;
 }
}

interface State{
 void show(Context context);
}

class Move implements State{
 public void show(Context context) {
 context.setState(this);
 System.out.println("物体处于运动状态");
 }
}

class Stop implements State{
 public void show(Context context) {
 context.setState(this);
 System.out.println("物体处于静止状态");
 }
}

状态模式是用于对象状态比较多的情况,比如完成一件事的时候有未完成、已完成、进行中、搁置等状态,这时候就可以考虑是用状态模式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 举例讲解Java中Piped管道输入输出流的线程通信控制

    举例讲解Java中Piped管道输入输出流的线程通信控制

    Java中的PipedWriter、PipedReader类管道的读写依赖于PipedOutputStream、PipedInputStream两个管道输入输出类,这里我们将来举例讲解Java中Piped管道输入输出流的线程通信控制:
    2016-06-06
  • Java编程实现逆波兰表达式代码示例

    Java编程实现逆波兰表达式代码示例

    本文主要对Java算法逆波兰表达式的相关内容作了介绍,涉及逆波兰表达式的定义已经在Java中的实现,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java Autowired注解深入分析

    Java Autowired注解深入分析

    @Autowired注解是Spring中非常重要且常见的,接下来就简要的介绍一下它的用法。@Autowired默认是通过set方法,按照类型自动装配JavaBean,set方法可省略不写,它主要是修饰在成员变量上
    2023-01-01
  • java中带参数的try(){}语法含义详解

    java中带参数的try(){}语法含义详解

    这篇文章主要介绍了java中带参数的try(){}语法含义详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • RocketMQ根据Tag进行消息过滤

    RocketMQ根据Tag进行消息过滤

    消费者订阅了某个主题后,Apache RocketMQ 会将该主题中的所有消息投递给消费者。若消费者只需要关注部分消息,可通过设置过滤条件在 Apache RocketMQ 服务端进行过滤,只获取到需要关注的消息子集,避免接收到大量无效的消息
    2023-02-02
  • Mybatis中<if>和<choose>的区别及“=”判断方式

    Mybatis中<if>和<choose>的区别及“=”判断方式

    这篇文章主要介绍了Mybatis中<if>和<choose>的区别及“=”判断方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 使用SpringBoot整合Jpa的过程详解

    使用SpringBoot整合Jpa的过程详解

    SpringBoot是一种快速开发框架,它简化了Java应用程序的开发过程,而Jpa是Java持久化规范的一种实现,将SpringBoot与Jpa整合可以更加方便地进行数据库操作,提高开发效率,本文将介绍如何使用Spring Boot整合Jpa,帮助读者快速上手并应用于实际项目中
    2023-12-12
  • Java concurrency集合之 CopyOnWriteArrayList_动力节点Java学院整理

    Java concurrency集合之 CopyOnWriteArrayList_动力节点Java学院整理

    这篇文章主要介绍了Java concurrency集合之 CopyOnWriteArrayList的相关资料,需要的朋友可以参考下
    2017-06-06
  • sentinel流量控制框架(目录设置)

    sentinel流量控制框架(目录设置)

    Sentinel 是面向分布式服务架构的高可用流量防护组件帮助开发者保障微服务的稳定性,本文重点给大家介绍sentinel流量控制框架的相关知识,感兴趣的朋友一起看看吧
    2022-03-03
  • mybatis自动填充时间字段示例代码

    mybatis自动填充时间字段示例代码

    这篇文章主要给大家介绍了关于mybatis自动填充时间字段的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01

最新评论