网站关键词免费优化,如何自己写一个网站,宁波seo搜索引擎优化,win7优化极致性能java设计模式之状态模式在本教程中#xff0c;我们将探讨另一种流行的行为设计模式-状态设计模式。 当我们使用可以存在于多个状态的对象时#xff0c;状态设计模式的知识变得非常有用。 当对象的行为取决于其当前状态时#xff0c;我们应该主要使用它。 这种模式有助于我们… java设计模式之状态模式 在本教程中我们将探讨另一种流行的行为设计模式-状态设计模式。 当我们使用可以存在于多个状态的对象时状态设计模式的知识变得非常有用。 当对象的行为取决于其当前状态时我们应该主要使用它。 这种模式有助于我们避免在该类的方法中对对象的状态进行长时间的条件检查。 有了它让我们开始吧 状态设计模式 我们可以用以下UML图表示状态设计模式 哪里 状态–表示一个抽象类或接口用于声明每个具体状态对象的最低预期功能 ConcreteState –这些是State的实现类 上下文–这是我们公开的类通常负责维护当前状态实例。 它还将责任委派给具体的状态类以执行任务 实施示例 假设我们有一个自动皂液器。 理想 分配或OutOfStock -它非常能在这些国家存在。 让我们借助状态图将其可视化 定义州类别 我们首先从定义我们的DispenserState接口开始 public DispenserState { void sensesHand(AutoDispenser autoDispenser); void stopsSensingHand(AutoDispenser autoDispenser); } 我们每个状态类都必须实现DispenserState并定义该状态的行为。 我们的IdleState类如下所示 public class IdleState implements DispenserState { public void sensesHand(AutoDispenser autoDispenser) { System.out.println( Hand sensed ); autoDispenser.startDispensing(); autoDispenser.setDispenserState(autoDispenser.getDispensingState()); } public void stopsSensingHand(AutoDispenser autoDispenser) { System.out.println( Sensor inactive already! ); } } 同样我们可以定义另外两个表示状态的类 public class DispensingState implements DispenserState { public void sensesHand(AutoDispenser autoDispenser) { System.out.println( Already dispensing ); } public void stopsSensingHand(AutoDispenser autoDispenser) { System.out.println( Stopped sensing ); autoDispenser.stopDispensing(); if (autoDispenser.getQuantity() 1 ) { autoDispenser.setDispenserState(autoDispenser.getIdleState()); } else { autoDispenser.setDispenserState(autoDispenser.getOutOfStockState()); } } } public class OutOfStockState implements DispenserState { public void sensesHand(AutoDispenser autoDispenser) { System.out.println( nothing to dispense ); } public void stopsSensingHand(AutoDispenser soapDispenser) { System.out.println( dispenser is already inactive ); } } 定义上下文 最后让我们定义上下文类– AutoDispenser 它将与客户端代码交互 public class AutoDispenser { private IdleState idleState; private DispensingState dispensingState; private OutOfStockState outOfStockState; private DispenserState currentDispenserState; public AutoDispenser() { this .idleState new IdleState(); this .dispensingState new DispensingState(); this .outOfStockState new OutOfStockState(); if (getQuantity() 0 ) { this .currentDispenserState idleState; } else { this .currentDispenserState outOfStockState; } } public int getQuantity() { //returns current soap quantity ... } public void startDispensing() { ... } public void stopDispensing() { ... } public void sensesHand() { this .currentDispenserState.sensesHand( this ); } public void stopsSensingHand() { this .currentDispenserState.stopsSensingHand( this ); } } 在这里我们保持自动分配器的当前状态并在具体的状态类中调用该方法以实现操作。 为什么是国家模式 除了帮助我们避免长期使用条件外它还提供了其他好处 添加新状态非常简单明了因为我们只需要定义另一个具体的状态类 同样删除状态仅需要删除关联的类 使代码更易于阅读和遵循 很好地证明了单一责任原则 结论 作为程序员对我们来说选择正确的设计模式以解决任何设计问题非常重要。 在本快速教程中我们探讨了状态设计模式。 我们了解了如何以及何时实施它。 翻译自: https://www.javacodegeeks.com/2019/09/state-design-pattern-java.htmljava设计模式之状态模式