广告
返回顶部
首页 > 资讯 > 后端开发 > Python >浅析Java语言中状态模式的优点
  • 234
分享到

浅析Java语言中状态模式的优点

Java状态模式Java状态模式优点 2023-02-16 18:02:33 234人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录一.介绍二.UML类图三.示意代码四.使用场景五.状态模式与策略模式对比六.优点一.介绍 状态模式(State Pattern)属于行为型模式。当控制一个对象状态转换的条件表达式

一.介绍

状态模式(State Pattern)属于行为型模式。当控制一个对象状态转换的条件表达式过于复杂时,把相关判断逻辑提取出来,用各个不同的状态类进行表示,系统处于哪种状态,直接使用相应的状态类对象进行处理,从而消除if/else、switch/case语句

二.UML类图

定义了多个状态,每个状态类仅实现自己的逻辑,由环境类负责切换状态

三.示意代码

业务代码

//环境类
public class Car {
    private CarState carState;
    public Car(CarState carState) {
        this.carState = carState;
    }
    public void setCarState(CarState carState) {
        this.carState = carState;
    }
    public void openDoor(){
        carState.openDoor();
    }
    public void closeDoor(){
        carState.closeDoor();
    }
    public void runCar(){
        carState.runCar();
    }
}
//抽象状态类
abstract class CarState{
    public abstract void openDoor();
    public abstract void closeDoor();
    public abstract void runCar();
}
//具体状态类
class OpenState extends CarState{
    @Override
    public void openDoor() {
        System.out.println("can not open the door");
    }
    @Override
    public void closeDoor() {
        System.out.println("close the door success");
    }
    @Override
    public void runCar() {
        System.out.println("can not run the car");
    }
}
//具体状态类
class CloseState extends CarState{
    @Override
    public void openDoor() {
        System.out.println("open the door success");
    }
    @Override
    public void closeDoor() {
        System.out.println("can not close the door");
    }
    @Override
    public void runCar() {
        System.out.println("run the car success");
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        CarState state = new CloseState();
        Car car = new Car(state);
        car.openDoor();
        car.setCarState(new OpenState());
        car.runCar();
    }
}

四.使用场景

  • 行为随状态改变而改变
  • 消除复杂的if/else
  • 状态类大概率会新增
  • 状态类中的方法大概率不会新增

五.状态模式与策略模式对比

状态模式与策略模式的UML类图几乎相同,因此比较一下两者的差异

状态模式状态之间可以存在互相依赖的关系状态之间互相转换,可以反复 策略模式多种算法行为选择一个就能满足算法之间彼此独立

六.优点

减少多重条件判断(使用状态模式可以避免多重条件判断)符合开闭原则(结合工厂模式,生成状态的具体子类对象)状态之间可以自由转换符合单一职责原则(将不同状态的行为分隔开)

到此这篇关于浅析Java语言中状态模式的优点的文章就介绍到这了,更多相关Java状态模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅析Java语言中状态模式的优点

本文链接: https://www.lsjlt.com/news/196444.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅析Java语言中状态模式的优点
    目录一.介绍二.UML类图三.示意代码四.使用场景五.状态模式与策略模式对比六.优点一.介绍 状态模式(State Pattern)属于行为型模式。当控制一个对象状态转换的条件表达式...
    99+
    2023-02-16
    Java状态模式 Java状态模式优点
  • java状态模式的特点有哪些
    这篇文章给大家分享的是有关java状态模式的特点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、特点状态类拥有相同的public方法状态类拥有一个属性指向使用此状态的实体类状态类在内部自动切换状态,用户无...
    99+
    2023-06-15
  • java设计模式之状态模式的示例分析
    这篇文章给大家分享的是有关java设计模式之状态模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 定义 很多时候,一个对象的行为会根据一个动态的属性变化而变化,这...
    99+
    2022-10-19
  • 浅析Java语言中的内部类
    浅析Java语言中的内部类[@more@]  提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。内部类从表面上...
    99+
    2023-06-03
  • Java状态设计模式实现对象状态转换的优雅方式
    目录介绍实现总结优点缺点应用场景介绍 Java状态模式(State Pattern)是一种面向对象的设计模式,它将对象的状态封装成独立的状态对象,并将对象的行为与状态对象解耦,它允许...
    99+
    2023-05-17
    Java状态设计模式 状态模式实现对象状态转换
  • 深入浅析Java中的Balking模式
    深入浅析Java中的Balking模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。当现在不适合这个操作,或是没有必要进行这个操作时就直接放弃这个操作而回去。这个就是Balki...
    99+
    2023-05-31
    java balking ava
  • 浅析集中式状态管理Vuex的使用方法
    如何使用集中式状态管理的Vuex?下面本篇文章就带大家了解一下vuex,简单聊聊vuex的使用方法,希望对大家有所帮助!1.vuex是什么一个专门在Vue中实现集中式状态管理的一个Vue插件,可以对vue应用中多个组件的共享状态进行集中式的...
    99+
    2023-05-14
    VueX
  • Java中的四种单例模式浅析
    前言近期在做支付,一开始图省事,也是为了调试方便,支付的alipayClient和tradeService都是使用的时候去拿,这样就会导致创建多次。为了节省资源,统一配置成单例模式。什么是单例Singleton(单例)是设计模式的一种,为了...
    99+
    2023-05-31
    java 单例模式 ava
  • C语言中有哪些进程的状态模型
    本篇文章给大家分享的是有关C语言中有哪些进程的状态模型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。什么是状态机定义状态机是有限状态自动机的简称,是现实事物运行规则抽象而成的一...
    99+
    2023-06-16
  • 深入浅析java设计模式中的代理模式
    这期内容当中小编将会给大家带来有关深入浅析java设计模式中的代理模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、什么是代理模式(Porxy)  概念:代理模式就是为其他对象提供一种代理以控制对这个...
    99+
    2023-05-31
    java ava 代理模式
  • vuejs中vuex状态管理模式的示例分析
    这篇文章给大家分享的是有关vuejs中vuex状态管理模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。关于vuex类的新闻最近很多,看到眼热就去查了下资料,然后扯出来...
    99+
    2022-10-19
  • vue中状态管理模式vuex的示例分析
    这篇文章主要介绍了vue中状态管理模式vuex的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vuex是一个专门为vue.js设计的...
    99+
    2022-10-19
  • 怎样浅析Java语言中两种异常的差别
    怎样浅析Java语言中两种异常的差别,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。浅析Java语言中两种异常的差别  Java提供了两类主要的异常:runtime except...
    99+
    2023-06-03
  • 深入解析Go语言中的单例模式
    单例模式是一种常见的设计模式,它在系统中仅允许创建一个实例来控制对某些资源的访问。在 Go 语言中,实现单例模式有多种方式,本篇文章将带你深入掌握 Go 语言中的单例模式实现。什么是单例模式单例模式指仅允许创建一个对象的设计模式。它通常应用...
    99+
    2023-05-14
    Go 设计模式
  • 深入浅析Go语言中要有GMP调度模型的原因
    Go为什么要有GMP调度模型?下面本篇文章给大家介绍一下Go语言中要有GMP调度模型的原因,希望对大家有所帮助!GMP调度模型是Go的精髓所在,它合理地解决了多线程并发调度协程的效率问题。GMP是什么首先得清楚,GMP各代指什么东西。G: ...
    99+
    2023-05-14
    后端 Go
  • Java语言在自然语言处理中的优势与劣势分析
    自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,旨在让计算机能够理解、处理和生成人类的自然语言。在NLP领域,Java语言作为一种主流编程语言,具有不同于其他语言的优势和劣势。本...
    99+
    2023-06-04
    numpy 自然语言处理 索引
  • java中工厂模式的优缺点有哪些
    这篇文章将为大家详细讲解有关java中工厂模式的优缺点有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。简单工厂模式介绍:概要:  简单工厂模式,又称为静态工厂方法(Static Fact...
    99+
    2023-05-31
    java 工厂模式 ava
  • Java实现自定义语言和表达式解析的解释器模式
    目录介绍实现总结优点缺点应用场景注意介绍 Java解释器模式(Interpreter pattern)是一种行为设计模式,它定义了一种语言的语法表示,并定义了解释器来解释该语法. 该...
    99+
    2023-05-17
    Java解释器设计模式 自定义编程语言解析 表达式求值
  • Go语言中的Facade模式:简化代码结构的利器解析
    Golang中的Facade设计模式解析:简化代码结构的利器引言:在软件开发中,代码的组织和管理是十分重要的。当一个项目规模逐渐增大时,代码结构将会变得复杂,难以理解和维护。为了解决这个问题,设计模式应运而生。其中的一个重要设计模式就是Fa...
    99+
    2023-12-20
    利器 Golang 中的 Facade 设计模式 简化代码结构
  • Go 语言在分布式系统中的应用:面试考点解析
    随着互联网时代的到来,分布式系统的使用越来越广泛。而在分布式系统的开发中,如何保证系统的高可用、高性能和高并发,成为了每个开发者必须面对的问题。而 Go 语言作为一种强调高并发和高性能的语言,在分布式系统开发中发挥着重要作用。本文将从面试...
    99+
    2023-06-16
    http 面试 分布式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作