文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-29 05:13

关注

这篇文章将为大家详细讲解有关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设计模式中的状态模式是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯