广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python设计模式中的状态模式是什么
  • 695
分享到

Python设计模式中的状态模式是什么

2023-06-29 05:06:52 695人浏览 安东尼

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

摘要

这篇文章将为大家详细讲解有关python设计模式中的状态模式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。状态模式状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。优点:封装了状态

这篇文章将为大家详细讲解有关python设计模式中的状态模式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

状态模式

状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。

Python设计模式中的状态模式是什么

优点

  • 封装了状态转换规则。

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

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

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

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

缺点

  • 状态模式的使用必然会增加系统类和对象的个数。

  • 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。

  • 状态模式对 “开闭原则” 并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

应用场景

  • 行为随状态改变而改变的场景。

  • 条件、分支语句的代替者。

代码示例

Python设计模式中的状态模式是什么

这是一个状态图,具有 “有 25 分钱”、“没有 25 分钱”、“售出糖果”、“糖果售罄” 这 4 个状态。同时也对应 4 个动作:“投入 25 分钱”,“退回 25 分钱”,“转动曲柄” 和 “发放糖果”。

class State:    # 定义state基类    def insert_quarter(self):        pass    def eject_quarter(self):        pass    def turn_crank(self):        pass    def dispense(self):        passclass SoldOutState(State):    # 继承State 类    def __init__(self, gumball_Machine):        self.gumball_machine = gumball_machine    def __str__(self):        return "sold_out"    def insert_quarter(self):        print("You can't insert a quarter, the machine is sold out")    def eject_quarter(self):        print("You can't eject, you haven't inserted a quarter yet")    def turn_crank(self):        print("You turned, but ther are no gumballs")    def dispense(self):        print("No gumball dispensed")class SoldState(State):    # 继承State 类    def __init__(self, gumball_machine):        self.gumball_machine = gumball_machine    def __str__(self):        return "sold"    def insert_quarter(self):        print("Please wait, we're already giving you a gumball")    def eject_quarter(self):        print("Sorry, you already turned the crank")    def turn_crank(self):        print("Turning twice doesn't get you another gumball")    def dispense(self):        self.gumball_machine.release_ball()        if gumball_machine.count > 0:            self.gumball_machine.state = self.gumball_machine.no_quarter_state        else:            print("Oops, out of gumballs!")            self.gumball_machine.state = self.gumball_machine.soldout_stateclass NoQuarterState(State):    # 继承State 类    def __init__(self, gumball_machine):        self.gumball_machine = gumball_machine    def __str__(self):        return "no_quarter"    def insert_quarter(self):        # 投币 并且改变状态        print("You inserted a quarter")        self.gumball_machine.state = self.gumball_machine.has_quarter_state    def eject_quarter(self):        print("You haven't insert a quarter")    def turn_crank(self):        print("You turned, but there's no quarter")    def dispense(self):        print("You need to pay first")class HasQuarterState(State):    # 继承State 类    def __init__(self, gumball_machine):        self.gumball_machine = gumball_machine    def __str__(self):        return "has_quarter"    def insert_quarter(self):        print("You can't insert another quarter")    def eject_quarter(self):        print("Quarter returned")        self.gumball_machine.state = self.gumball_machine.no_quarter_state    def turn_crank(self):        print("You turned...")        self.gumball_machine.state = self.gumball_machine.sold_state    def dispense(self):        print("No gumball dispensed")class GumballMachine:    def __init__(self, count=0):        self.count = count        # 找出所有状态,并创建实例变量来持有当前状态,然后定义状态的值        self.soldout_state = SoldOutState(self)        self.no_quarter_state = NoQuarterState(self)        self.has_quarter_state = HasQuarterState(self)        self.sold_state = SoldState(self)        if count > 0:            self.state = self.no_quarter_state        else:            self.state = self.soldout_state    def __str__(self):        return ">>> Gumball machine current state: %s" % self.state    def insert_quarter(self):        # 投入25分钱        self.state.insert_quarter()    def eject_quarter(self):        # 退回25分        self.state.eject_quarter()        # print("state", self.state, type(self.state))    def turn_crank(self):        # 转动曲柄        # print("state", self.state, type(self.state))        self.state.turn_crank()    def release_ball(self):        # 发放糖果        print("A gumball comes rolling out the slot...")        if self.count > 0:            self.count -= 1        if __name__ == "__main__":    # 以下是代码测试    gumball_machine = GumballMachine(5) # 装入5 个糖果    print(gumball_machine)    gumball_machine.insert_quarter() # 投入25分钱    gumball_machine.turn_crank() # 转动曲柄    print(gumball_machine)    gumball_machine.insert_quarter() #投入25分钱    gumball_machine.eject_quarter()  # 退钱    gumball_machine.turn_crank()     # 转动曲柄    print(gumball_machine)    gumball_machine.insert_quarter() # 投入25分钱    gumball_machine.turn_crank() # 转动曲柄     gumball_machine.insert_quarter() # 投入25分钱     gumball_machine.turn_crank()  # 转动曲柄    gumball_machine.eject_quarter() # 退钱    print(gumball_machine)

关于“Python设计模式中的状态模式是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Python设计模式中的状态模式是什么

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

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

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

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

下载Word文档
猜你喜欢
  • Python设计模式中的状态模式是什么
    这篇文章将为大家详细讲解有关Python设计模式中的状态模式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。状态模式状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。优点:封装了状态...
    99+
    2023-06-29
  • Python设计模式中的状态模式你了解吗
    目录状态模式应用场景代码示例总结状态模式 状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。 优点: 封装了状态转换规则。枚举了可能的状态,在枚举状态之前需要确定...
    99+
    2022-11-13
  • Java设计模式之状态模式
    实际开发中订单往往都包含着订单状态,用户每进行一次操作都要切换对应的状态,而每次切换判断当前的状态是必须的,就不可避免的引入一系列判断语句,为了让代码更加清晰直观,我们引入今天的主角...
    99+
    2022-11-13
    Java 设计模式 状态模式
  • 设计模式手册之状态模式
    1. 什么是“状态模式”? 状态模式:对象行为是基于状态来改变的。 内部的状态转化,导致了行为表现形式不同。所以,用户在外面看起来,好像是修改了行为。 Webpack4系列教程(17篇) + 设计模式手册(16篇):GitHub地址 博客...
    99+
    2023-01-31
    模式 状态 手册
  • Java设计模式之状态模式详解
    目录1. 状态模式的概述2. 状态模式的结构与实现3. 状态模式的优缺点4. 状态模式的适用场景5. 示例程序的设计与实现1. 状态模式的概述 状态模式是一种通过将对象的状态转换逻辑...
    99+
    2023-05-20
    Java 状态模式 Java 设计模式
  • 【深入浅出设计模式--状态模式】
    深入浅出设计模式--状态模式 一、背景二、问题三、解决方案四、 适用场景总结五、后记 一、背景 状态模式是一种行为设计模式,让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。其与有限状态机的概念紧...
    99+
    2023-08-30
    c++ 设计模式 状态模式 单例模式
  • 如何理解Java设计模式的状态模式
    本篇内容介绍了“如何理解Java设计模式的状态模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是状态模式定义:当一个对象的内在状态...
    99+
    2023-06-25
  • Java设计模式之java状态模式详解
    目录状态模式的结构状态模式的角色 示例代码适用场景投票案例认识状态模式状态和行为行为的平行性环境和状态处理对象状态模式优点状态模式的缺点状态模式和策略模式对比参考文章 总结...
    99+
    2022-11-12
  • Java设计模式之状态模式StatePattern详解
    目录概述UML类图状态模式与策略模式谁决定状态转换的流向State是接口还是抽象类应用案例分析状态抽象类可以抽奖的状态奖品发放完毕状态发放奖品的状态不能抽奖状态抽奖活动(Contex...
    99+
    2022-11-13
    Java状态模式 Java State Pattern
  • JavaScript设计模式之命令模式和状态模式详解
    目录命令模式命令模式介绍代码实现状态模式状态模式介绍代码实现小结命令模式 命令模式介绍 命令模式(Command)的定义是:用于将一个请求封装成一个对象,从而使你可用不同的请求对客户...
    99+
    2022-11-13
  • java设计模式之状态模式的示例分析
    这篇文章给大家分享的是有关java设计模式之状态模式的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 定义 很多时候,一个对象的行为会根据一个动态的属性变化而变化,这...
    99+
    2022-10-19
  • .Net行为型设计模式之状态模式(State)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、状态模式的代码实现六、状态模式的实现要点:1、状态模式的优点2、状态模式的缺...
    99+
    2022-11-13
  • 深入理解Java设计模式之状态模式
    目录一、什么是状态模式二、状态模式的结构三、状态模式的使用场景四、状态模式和策略模式对比五、状态模式的优缺点六、状态模式的实现七、总结一、什么是状态模式 定义:当一个对象的内在状态改...
    99+
    2022-11-12
  • C++设计模式中的桥模式是什么
    这篇文章主要介绍了C++设计模式中的桥模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单一职责模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是...
    99+
    2023-06-29
  • Python设计模式中如何使用状态模式实现编辑功能
    Python设计模式中如何使用状态模式实现编辑功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。功能介绍新增对象选择,连接线编辑功能。新增对象选择状态表示,连接...
    99+
    2023-06-19
  • .Net行为型设计模式之状态模式怎么实现
    这篇文章主要介绍“.Net行为型设计模式之状态模式怎么实现”,在日常操作中,相信很多人在.Net行为型设计模式之状态模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.Net行为型设计模式之状态模式怎...
    99+
    2023-06-30
  • PHP中状态模式指的是什么
    这篇文章主要介绍了PHP中状态模式指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。状态模式从字面上其实并不是很好理解。这里的状态是什么意思呢?保存状态?那不就是备忘录...
    99+
    2023-06-20
  • JS设计模式之状态模的示例分析
    这篇文章主要介绍了JS设计模式之状态模的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 概述当一个对象的内在状态改变时允许改变其...
    99+
    2022-10-19
  • java设计模式的策略模式是什么
    这篇文章主要介绍“java设计模式的策略模式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java设计模式的策略模式是什么”文章能帮助大家解决问题。策略模式亦称:Strategy意图策略模式是...
    99+
    2023-07-02
  • 设计模式之什么是工厂模式
    本篇内容主要讲解“设计模式之什么是工厂模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“设计模式之什么是工厂模式”吧! 01 简单工厂方法简单工厂方法...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作