考虑我有一个这样的界面:

public interface Test {
  //Basically life cycle methods
  public void beforeStart();
  public void start();
  public void end();
}


还有一个抽象类,它为所有方法提供基本或空的实现。

public abstract class TestAdapter implements Test {
   //Implementations here
}


这样,扩展TestAdapter的客户端可以覆盖一种或所有生命周期方法。我要求每个使用者都应扩展TestAdapter类,并且他们可以覆盖TestAdapter中的全部或一个或一个生命周期方法。

但是问题在于TestAdapter的每个使用者都创建了一个POJO类的实例,应该为其管理生命周期,例如beforeStart()等。

我的问题是:


如果客户端覆盖了所有生命周期方法,那没有问题,但是,如果他不覆盖任何方法,我应该能够为该特定生命周期方法执行默认服务,并且我需要为其引用创建的用户testAdapter实现类中的POJO。我该如何执行呢?
如您所知,这有点类似于servlet的生命周期。有人可以引导我吗?还是我使设计复杂化?


如果您需要进一步的说明,请告诉我。

编辑:
注意:如果您觉得我正在尝试重新发明轮子,是否可以建议上述要求的替代方案?

最佳答案

首先,我认为您应该使用大多数测试框架中都可以看到的注释:

@BeforeClass
public void beforeClass() {
  // code here
}

@BeforeMethod
public void beforeMethod() {
  // code here
}


如果您真的想继承,您可以执行以下操作:

public abstract class TestAdapter implements Test {

    private AbstractPojo myPojo;

    protected void doBeforeStart(){
        // do something which you always want to happen
        beforeStart();
    }
    protected void doStart() {
        start();
    }
    protected void doEnd() {
        end();
    }

    // your empty implementations of Test here

    // getter and setter for myPojo
}


在这种情况下,您可以在内部控制应该发生的情况,并让您的用户在他们认为合适的情况下覆盖界面中的方法。

09-08 07:29