博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-行为型模式,状态模式(14)
阅读量:4582 次
发布时间:2019-06-09

本文共 1575 字,大约阅读时间需要 5 分钟。

在状态模式(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.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("Switching to AM")        self.radio.state = self.radio.amstateclass 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 outif __name__ == '__main__':    radio = Radio()    actions = [radio.scan] * 2 + [radio.toggle_amfm] + [radio.scan] * 2    actions = actions * 2    for action in actions:        action()

 

转载于:https://www.cnblogs.com/ydf0509/p/8527468.html

你可能感兴趣的文章
Oracle 块修改跟踪 (Block Change Tracking) 说明
查看>>
阿里云 Redis 服务遇到的问题
查看>>
Jwt Token 安全策略使用 ECDSA 椭圆曲线加密算法签名/验证
查看>>
Window2008通过web.config进行限制ip访问
查看>>
浅析门户网站体育赛事CDN加速解决方案
查看>>
启动/关闭xp_cmdshell
查看>>
[PY3]——内置数据结构(8)——解构与封装
查看>>
进程、单线程和多线程
查看>>
python入门(3)python的解释器
查看>>
maven入门(1-3)构建简单的maven项目
查看>>
git 清除本地无效的分支
查看>>
poj1001--Exponentiation
查看>>
Python基础(迭代)
查看>>
使用 PHP 获得网页内容 GET方式
查看>>
TJU Problem 2857 Digit Sorting
查看>>
C# 修饰符
查看>>
java中使用session的一些细节
查看>>
浏览器输入服务器端口号来访问html网页
查看>>
hdu 6435 CSGO(最大曼哈顿距离)
查看>>
logback框架之——日志分割所带来的潜在问题
查看>>