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

来源:互联网 发布:淘宝开店要哪些照片 编辑:程序博客网 时间:2024/05/19 02:28

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

"""状态模式的实现"""from __future__ import print_functionclass 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.fmstateclass 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.amstateclass 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
原创粉丝点击