当前位置:  开发笔记 > 编程语言 > 正文

Java:用于处理状态和继承的设计模式

如何解决《Java:用于处理状态和继承的设计模式》经验,为你挑选了0个好方法。

我会尝试解释我在汽车上的问题.我有AbstractCar,我的库的用户(开发人员)将创建许多他们的ConcreteCars.这个AbstractCar有状态,这个状态对于图书馆的正确工作非常重要!只有汽车可以控制其状态(没有任何司机等).方法的状态变化在方法的开始和结束时开始/停止.除了所有汽车必须实现接口汽车.

public enum State{
   STARTING, STARTED, STOPPING, STOPPED
}

public interface Car{
   public void start();
   public void stop();
   public State getState();
}

我尝试了两种变体.

变式1

public abstract class AbstractCar implements Car{
  private State state;
  public void setState(State state){...}
  public State getState(){...}
}

public class ConcreteCar extends AbstractCar{
  @Override
  public void start(){
     setState(stateK);
     ...
     setState(stateN);
  }

  @Override
  public void stop(){
     setState(stateR);
     ...
     setState(stateO);
  }
}

在变体1中,库的用户必须记住改变状态.如果他忘记这样做,那么代码中就会出现错误.

变体2

public abstract class AbstractCar implements Car{
  private State state;
  protected void doOnStart(){ }
  protected void doOnStop(){ }
  public final void start(){
    state=...;
    doOnStart();
    state=...;
  }
  public final void stop(){
    state=...;
    doOnStop();
    state=...;
  }
}

public class ConcreteCar extends AbstractCar{
  @Override
  protected void doOnStart(){
    ....
  }

  @Override
  protected void doOnStop(){
     ...
  }
}

在变体2中,用户不能忘记状态,因为它已经超出了他的控制范围,但是如果我有许多状态和许多可以改变它们的方法,这不是一个非常好的方法.

任何人都可以建议任何模式或技术如何解决这样的问题?

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有