java设计模式之-状态模式

引用自23种设计模式(Java版,超详细!) - 知乎

但是模式切换有问题,稍作修改

java中的线程状态就是一个典型的状态模式的应用场景。Java线程可以有不同的状态,如NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED等。每个状态都对应一个Java枚举类,表示线程在该状态下的行为。例如,线程在BLOCKED状态下等待锁,线程在WAITING状态下等待其他线程的通知。

举一个Java中的状态模式的例子,假设我们要实现一个简单的电梯系统。电梯有三个状态:开门状态、关门状态和运行状态。在开门状态下,电梯门会保持打开状态;在关门状态下,电梯门会保持关闭状态;在运行状态下,电梯会根据当前目的地的楼层上下运行,并在到达目的地后停下来。我们可以使用状态模式来实现电梯系统,每个状态都对应一个类,表示电梯在该状态下的行为,状态转换可以通过调用电梯类的方法来完成。

状态模式(State)

问题:

当一个对象的行为在不同状态下发生改变,并且对象需要根据其状态执行不同的操作时,就可以考虑使用状态模式。在这种情况下,如果直接在对象内部实现所有状态之间的切换逻辑,会导致代码变得复杂且难以维护。

解决方案:

状态模式的解决方案是将对象的状态抽象成独立的状态类,每个状态类都实现了一组特定状态下的操作。然后,上下文对象(即包含状态的对象)维护一个指向当前状态的引用,通过委托给当前状态的方法来执行操作。这种方式可以将不同状态下的行为逻辑分隔开来,使得状态变化时的代码修改更加容易。

效果:

使用状态模式可以实现以下效果:

  • 清晰的状态切换: 状态模式将每个状态的行为集中在各自的状态类中,使得状态切换的逻辑变得清晰,易于管理和修改。
  • 可维护性: 将状态相关的代码分布在不同的状态类中,使得代码更加模块化和可维护。
  • 扩展性: 添加新的状态只需要创建新的状态类并实现相关操作,不会影响到其他状态类或上下文类的代码。
  • 避免条件语句: 状态模式避免了大量的条件语句,从而提高了代码的可读性和可维护性。
  • 复用性: 状态类之间的逻辑可以被复用,因为它们是独立的实体。

总之,状态模式使得对象在不同状态下能够更加灵活地切换行为,同时保持了代码的可维护性和可扩展性。它在需要处理复杂状态逻辑的情况下特别有用。

代码示例:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值