状态模式 电梯

简介: 状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变它的行为。状态模式将对象的行为封装到不同的状态类中,每个状态类都实现了对象在该状态下具体的行为。当对象的状态发生改变时,它会自动切换到相应的状态类,从而改变它的行为。

状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变它的行为。状态模式将对象的行为封装到不同的状态类中,每个状态类都实现了对象在该状态下具体的行为。当对象的状态发生改变时,它会自动切换到相应的状态类,从而改变它的行为。

状态模式的核心思想是将对象的行为和状态分离,将不同的状态封装到不同的状态类中,让对象在运行时可以自由切换状态,从而实现不同的行为。

下面是一个简单的状态模式的Demo,假设有一个电梯系统,它可以处于三种状态:运行状态、停止状态和维修状态。在不同的状态下,电梯的行为是不同的。

python
Copy

状态抽象类

class ElevatorState:
def open_door(self):
pass

def close_door(self):
    pass

def go_up(self):
    pass

def go_down(self):
    pass

运行状态类

class RunningState(ElevatorState):
def open_door(self):
print("电梯正在运行,无法开门。")

def close_door(self):
    print("电梯正在运行,门已经关闭。")

def go_up(self):
    print("电梯正在上行。")

def go_down(self):
    print("电梯正在下行。")

停止状态类

class StoppedState(ElevatorState):
def open_door(self):
print("电梯门已经打开。")

def close_door(self):
    print("电梯门已经关闭。")

def go_up(self):
    print("电梯开始上行。")

def go_down(self):
    print("电梯开始下行。")

维修状态类

class MaintenanceState(ElevatorState):
def open_door(self):
print("电梯正在维修中,无法开门。")

def close_door(self):
    print("电梯正在维修中,门已经关闭。")

def go_up(self):
    print("电梯正在维修中,无法运行。")

def go_down(self):
    print("电梯正在维修中,无法运行。")

电梯类

class Elevator:
def init(self):
self.running_state = RunningState()
self.stopped_state = StoppedState()
self.maintenance_state = MaintenanceState()

    self.current_state = self.stopped_state

def set_state(self, state):
    self.current_state = state

def open_door(self):
    self.current_state.open_door()

def close_door(self):
    self.current_state.close_door()

def go_up(self):
    self.current_state.go_up()

def go_down(self):
    self.current_state.go_down()

客户端代码

elevator = Elevator()

elevator.open_door() # 电梯门已经打开。
elevator.close_door() # 电梯门已经关闭。
elevator.go_up() # 电梯开始上行。

elevator.set_state(elevator.running_state)
elevator.go_up() # 电梯正在上行。
elevator.open_door() # 电梯正在运行,无法开门。

elevator.set_state(elevator.maintenance_state)
elevator.go_up() # 电梯正在维修中,无法运行。
elevator.open_door() # 电梯正在维修中,无法开门。
在这个Demo中,ElevatorState是状态抽象类,定义了电梯在不同状态下的行为接口。RunningState、StoppedState和MaintenanceState是具体的状态类,它们分别实现了不同状态下的行为接口。Elevator是电梯类,它通过组合状态类实现状态的切换和行为的改变。

当客户端使用状态模式时,需要先定义一个状态抽象类,然后实现具体的状态类,每个状态类都封装了一种状态下的行为。状态模式的应用场景比较广泛,例如:

电梯系统:如上面的示例,电梯系统可以根据不同的状态实现不同的行为。
游戏系统:游戏中的角色、怪物等可以根据不同的状态实现不同的行为,例如攻击、逃跑、防御等。
购物车系统:购物车可以根据不同的状态实现不同的行为,例如添加商品、删除商品、结算等。
线程池系统:线程池可以根据不同的状态实现不同的行为,例如运行、暂停、停止等。
总之,状态模式适用于对象的行为随着内部状态的改变而改变的场景,它可以使对象的行为更加灵活和可扩展。

以下是一些推荐的学习资料和链接,可以帮助你更好地学习状态模式:

《Head First 设计模式》:这是一本非常通俗易懂的设计模式入门书籍,其中包含了对状态模式的讲解和示例代码。
《设计模式:可复用面向对象软件的基础》:这是设计模式的经典著作之一,其中包含了对状态模式的详细讲解和示例代码。
《图解设计模式:以UML为基础,学习23种设计模式》:这是一本以图解为主的设计模式入门书籍,其中包含了对状态模式的详细讲解和示例代码。
状态模式的Java实现:这是一个包含了状态模式示例代码的Java项目,可以帮助读者更好地理解和应用状态模式。
GitHub链接:https://github.com/iluwatar/java-design-patterns/tree/master/state
总之,学习状态模式需要结合书籍和实践,建议读者选择一些适合自己的入门书籍,同时结合实际项目中的设计问题进行实践,加深对状态模式的理解和应用。

目录
相关文章
|
10月前
|
前端开发
状态模式
状态模式
41 0
|
设计模式 Java uml
状态模式 电梯
状态模式是一种行为型设计模式,它允许对象在内部状态发生改变时改变它的行为。状态模式将对象的行为封装到不同的状态类中,每个状态类都实现了对象在该状态下具体的行为。当对象的状态发生改变时,它会自动切换到相应的状态类,从而改变它的行为。
98 1
|
设计模式 算法 C++
2023-7-12-第十七式状态模式
2023-7-12-第十七式状态模式
63 0
|
设计模式 JavaScript
关于状态模式我所知道的
关于状态模式我所知道的
58 0
|
算法 前端开发
C++实验二:类的继承机制的实现——电梯2.0
实现对第一次实验结果Elevator类的功能扩展。在Elevator类已有功能的基础上派生AdvancedElevator类。AdvancedElevator类可以实现当多人在不同楼层等待乘坐上行或下行的同一部电梯时,能够合理的根据乘坐人的需求对电梯经停的楼层进行排序。
405 0
C++实验二:类的继承机制的实现——电梯2.0
|
API 数据安全/隐私保护 C++
C++实验一:类与对象——电梯
编写一个程序,模拟电梯的功能。功能接口包括电梯上行按钮、下行按钮、楼层选择和电梯在行驶过程中的楼层显示。 要求: 1.由用户选择按上行按钮还是下行按钮,选择操作后再由用户输入要进入的楼层,进而电梯开始运行,显示所到的每一楼层层数。 2.如果是上行,则选择输入的楼层好不能比当前楼层号小,否则应给出不合法提示。 3. 如果是下行,则选择输入的楼层好不能比当前楼层号大,否则应给出不合法提示。 4.电梯一旦开始运作就会始终运行,直到窗口关闭。 5.电梯在经过不同楼层时,最好每个楼层的显示之间能有延迟,最终停靠
211 0
C++实验一:类与对象——电梯
|
设计模式
我学会了,状态模式
状态模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
107 0
我学会了,状态模式