zoukankan      html  css  js  c++  java
  • 设计模式-行为型模式,状态模式(14)

    在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。

    在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

    class State(object):
        """Base state. This is to share functionality"""
    
        def scan(self):
            """Scan the dial to the next station"""
            self.pos += 1
            if self.pos == len(self.stations):
                self.pos = 0
            print("Scanning... Station is", 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("Switching to 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("Switching to AM")
            self.radio.state = self.radio.amstate
    
    
    class Radio(object):
        """A radio.     It has a scan button, and an AM/FM toggle switch."""
    
        def __init__(self):
            """We have an AM state and an FM state"""
            self.amstate = AmState(self)
            self.fmstate = FmState(self)
            self.state = self.amstate
    
        def toggle_amfm(self):
            self.state.toggle_amfm()
    
        def scan(self):
            self.state.scan()
    
    
    # Test our radio out
    if __name__ == '__main__':
        radio = Radio()
        actions = [radio.scan] * 2 + [radio.toggle_amfm] + [radio.scan] * 2
        actions = actions * 2
    
        for action in actions:
            action()

  • 相关阅读:
    P3973 [TJOI2015]线性代数
    P3168 [CQOI2015]任务查询系统
    二次剩余学习笔记
    URL注入攻击+知识星球资源整理
    我的网络安全架构知识点的总结(待完善)
    Sudo提权
    DNSlog平台各种利用姿势(盲注)
    Wireshark抓包理论加实操
    Fofa搜索技巧(理论加实践的整理)
    Windows留后门维持权限(其中包括详细的telnet改端口与连接)
  • 原文地址:https://www.cnblogs.com/ydf0509/p/8527468.html
Copyright © 2011-2022 走看看