关闭

Python设计模式(十三)【状态模式】

标签: python设计模式对象
1882人阅读 评论(0) 收藏 举报
分类:

志向和热爱是伟大行为的双翼

"""状态模式的实现"""
from __future__ import print_function

class State(object):
    """基本状态。这是共享的功能"""
    def scan(self):
        """扫描拨盘到下一状态"""
        self.pos += 1
        if self.pos == len(self.stations):
           self.pos = 0
        print("扫描... 状态是", self.stations[self.pos], self.name)

class AmState(State):

    def __init__(self, radio):
        self.radio = radio
        self.stations = ["1250", "1380", "1510"]
        self.pos = 0
        self.name = "AM"

    def toggle_amfm(self):
        print("切换到FM...")
        self.radio.state = self.radio.fmstate


class FmState(State):

    def __init__(self, radio):
        self.radio = radio
        self.stations = ["81.3", "89.1", "103.9"]
        self.pos = 0
        self.name = "FM"

    def toggle_amfm(self):
        print("切换到AM...")
        self.radio.state = self.radio.amstate

class Radio(object):

    """一台收音机。它有一个扫描按钮,和一个AM / FM切换开关。"""

    def __init__(self):
        """我们有一个AM状态和FM状态"""
        """AmState继承了State"""
        self.amstate = AmState(self)
        self.fmstate = FmState(self)
        """初始化am状态"""
        self.state = self.amstate

    def toggle_amfm(self):
        self.state.toggle_amfm()

    def scan(self):
        self.state.scan()

# 测试入口
if __name__ == '__main__':
    radio = Radio()
    actions = [radio.scan] * 2 + [radio.toggle_amfm] + [radio.scan] * 2
    actions *= 2

    for action in actions:
        action()

运行结果如图:

这里写图片描述

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:896858次
    • 积分:13056
    • 等级:
    • 排名:第1090名
    • 原创:308篇
    • 转载:441篇
    • 译文:56篇
    • 评论:93条
    博客专栏
    文章分类
    打赏
    如果你觉得我的文章对您有用,请随意打赏。 微信 支付宝