极客神殿

坚持,自由,信仰

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

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

"""状态模式的实现"""
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()

运行结果如图:

这里写图片描述

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WuLex/article/details/52367427
个人分类: Python开发
上一篇流年,留念
下一篇Python设计模式(十四)【策略模式】
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭