设计模式之状态模式
来源:互联网 发布:sql server 自增列 编辑:程序博客网 时间:2024/04/29 17:58
# -*- coding: gbk -*-# -*- coding: utf-8 -*-"""@author: Edgar这是状态模式的一个应用场景。(具体故事情节请见《设计模式之禅》)"""class Context(object): def __init__(self): self.open_State = Open_State(self) self.closeState = CloseState(self) self.runState = RunState(self) self.stopState = StopState(self) def setState(self, state): self.state = state self.state.setContext(self) def getState(self): return self.state def showState(func): def _showState(obj): print '当前状态为: {0}'.format(obj.state.__class__.__name__) return func(obj) return _showState @showState def open_(self): self.state.open_() @showState def close(self): self.state.close() @showState def run(self): self.state.run() @showState def stop(self): self.state.stop() class AbsState(object): def __init__(self, context): self.context = context def setContext(self, context): self.context = context def open_(self): pass def close(self): pass def run(self): pass def stop(self): pass class Open_State(AbsState): def open_(self): print '电梯运行' def close(self): self.context.setState(self.context.closeState) self.context.getState().close() def run(self): print '当前状态不能运行' def stop(self): print '当前状态不能停止' class CloseState(AbsState): def open_(self): self.context.setState(self.context.open_State) self.context.getState().open_() def close(self): print '电梯关门' def run(self): self.context.setState(self.context.runState) self.context.getState().run() def stop(self): self.context.setState(self.context.stopState) self.context.getState().stop() class RunState(AbsState): def open_(self): print '当前状态不能开门' def close(self): print '当前状态不能关门' def run(self): print '电梯上下运行' def stop(self): self.context.setState(self.context.stopState) self.context.getState().stop() class StopState(AbsState): def open_(self): self.context.setState(self.context.open_State) self.context.getState().open_() def close(self): print '当前状态不能关门' def run(self): self.context.setState(self.context.runState) self.context.getState().run() def stop(self): self.context.setState(self.context.stopState) self.context.getState().stop() if __name__ == '__main__': context = Context() context.setState(context.closeState) context.open_() context.stop() context.close()
0 0
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之--状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 设计模式之状态模式
- 【设计模式】之状态模式
- Oracle sql 宝典
- 并查集--带权
- iOS常用设计模式——单例模式
- hdu4407(容斥原理)
- 漫谈数据库索引一
- 设计模式之状态模式
- [Android笔记]lisview异步加载(未修正参考)
- Leetcode Pascal's Triangle
- 三种方式去掉iOS模拟器屏幕上的status bar
- 自然语言处理--中文分词之机械分词
- iPhone文件系统NSFileManager讲解
- UBUNTU12.044下安装SAMBA服务器
- java静态内部类
- 寻找最大数(三)