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()

运行结果如图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值