📅  最后修改于: 2023-12-03 15:40:50.091000             🧑  作者: Mango
状态设计模式是一种行为设计模式,它允许一个对象在其内部状态改变时改变其行为。
状态设计模式是一种通过封装不同状态的行为来改变对象行为的动态策略。该模式包括:
## UML类图
![state_design_pattern](https://user-images.githubusercontent.com/46163555/133351835-2568c64d-b9af-4a85-8030-8e36ae47f1fe.png)
假设一个电梯控制系统,现在需要根据不同的状态来改变电梯的行为。
from abc import ABC, abstractmethod
# 抽象状态
class State(ABC):
@abstractmethod
def open(self):
pass
@abstractmethod
def close(self):
pass
@abstractmethod
def run(self):
pass
@abstractmethod
def stop(self):
pass
# 具体状态
class Open(State):
def open(self):
print("电梯已经开了!")
def close(self):
print("电梯即将关门!")
return Close()
def run(self):
print("电梯正在运行!")
return Run()
def stop(self):
print("电梯正在停止!")
return Stop()
class Close(State):
def open(self):
print("电梯即将打开!")
return Open()
def close(self):
print("电梯已经关了!")
def run(self):
print("电梯即将运行!")
return Run()
def stop(self):
print("电梯已经停止!")
return Stop()
class Run(State):
def open(self):
print("电梯正在运行!")
def close(self):
print("电梯正在运行!")
def run(self):
print("电梯正在运行!")
def stop(self):
print("电梯即将停止!")
return Stop()
class Stop(State):
def open(self):
print("电梯已经停止!")
return Open()
def close(self):
print("电梯已经停止!")
def run(self):
print("电梯正在停止!")
def stop(self):
print("电梯已经停止!")
# 环境
class Context:
def __init__(self):
self.state = Stop() # 初始化状态为停止状态
def setState(self, state):
self.state = state
def open(self):
self.state = self.state.open()
def close(self):
self.state = self.state.close()
def run(self):
self.state = self.state.run()
def stop(self):
self.state = self.state.stop()
if __name__ == '__main__':
c = Context()
c.open() # 电梯已经开了!
c.close() # 电梯即将关门!
c.run() # 电梯正在运行!
c.stop() # 电梯即将停止!
状态设计模式是一种优秀的软件架构模式,通过把状态封装进类中,使程序更容易扩展和维护。然而,由于这种模式会增加程序的复杂度,不适合简单的应用场合,需要在实际应用中进行取舍。