定义:在状态模式(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状态模式所有情况_轻松掌握Java状态模式相关推荐

  1. java 和c 多态比较_多态在 Java 和 C 编程语言中的实现比较

    2011 年 12 月 22 日发布 众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定.C++ 和 Java 作为当前最为流行的两种 ...

  2. java 魔板游戏_轻松掌握Java模板模式

    定义:一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行 特点: 1.封装不变部分,扩展可变部分. 2.提取公共代码,便于维护. 3.行为由 ...

  3. java 反射 单列_轻松掌握Java单例模式

    单例模式是23中设计模式中最简单的设计模式,在企业开发中也应用的特别多.单例模式的优点是:项目中有且仅有一个实例. 特点:构造器私有化,对象私有化,只提供一个对外访问的接口. 应用场景: 1.系统需要 ...

  4. java对接支付宝微信银联_经典设计模式之策略模式【如何重构聚合支付平台,对接【支付宝,微信,银联支付】】(示例代码)...

    写在前面:设计模式源于生活,而又高于生活! 为什么要使用设计模式重构代码 使用设计模式可以重构整体架构代码.提高代码复用性.扩展性.减少代码冗余问题. Java高级工程师装逼的技能! 什么是策略模式 ...

  5. java 如何循环执行一个对象_养猪场循环生态循环模式及其效益分析,当前牧草成为生态循环猪场效益更好的选择,如何打造一个现代生态循环的高效益猪场?...

    养猪场循环生态循环模式及其效益分析 2010年前的推广模式参考 随着国民经济的快速发展,人民的生活水平在不断提高,民众对环境的要求也越来越高,包括人文环境和自然环境.同时,农村地区的环境治理工作也逐渐 ...

  6. 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析

    Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...

  7. java线程池深入讲解_死磕 java线程系列之线程池深入解析——生命周期

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 上一章我们一起重温了下线程的 ...

  8. java的应用程序开发_开发一个Java应用程序(1)

    开发一个Java应用程序(1) App Engine上的Java Web应用程序通过Java Servlet标准接口与应用程序服务器交互.一个应用程序由一个或多个类组成,这些类都扩展自一个servle ...

  9. java方法区对象类型_浅谈Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

最新文章

  1. MYSQL日期 字符串 时间戳互转
  2. shell脚本将本地docker镜像push到阿里云镜像仓库
  3. php fopen 图片下载,php curl与fopen下载远程服务器图片实例
  4. java中ssm付款代码,ssm实现支付宝支付功能(图文详解)
  5. 爬虫的单线程+多任务异步协程:asyncio 3.6
  6. Cookie知识点总结
  7. 品质背景壁纸网站高图网,选图不用瞎找了!
  8. python实现简单爬虫百度首页_python实现简单爬虫功能的示例
  9. mysql java safe model_被 MySQL sql_mode 深深伤害( 中 )
  10. shell监控Nginx服务是否存在的脚本
  11. Servlet CDI Example Analysis
  12. Hibernate之分页查询
  13. js调用zk中zul页面表单值
  14. 清洁机器人--屏幕显示LCD方案之MCU SPI 接口驱动ST7789 LCD显示
  15. gst-launch-1.0
  16. STM32进入Standby模式并唤醒
  17. 已知三角形三边长求面积java_已知三角形三点坐标求三角形面积.java
  18. Python数据挖掘(1)亲和性分析
  19. 经验分享:一套完整的硬件电路设计该怎么做?
  20. 【文献】非牛顿流体调研总结

热门文章

  1. Buuctf(pwn)ciscn_2019_n_8
  2. Python命令行运行文件的实例方法
  3. python是烂语言吗
  4. 嵌入式c语言检测键盘,【精华整理】C语言嵌入式系统编程修炼--键盘操作篇
  5. qt无法找到动态链接库文件怎么办?
  6. ubuntu为什么每次用apt安装软件前都要更新(apt-get update)一下?
  7. Python的第一种数据类型——Number(数字)
  8. linux——Firewalld与iptables的基本配置
  9. PAT甲级题目翻译+答案 AcWing(基础算法与数据结构)
  10. php画中画,画中画功能 怎么将两个视频叠加播放,制作成画中画效果