考虑我有一个这样的界面:
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
}
在这种情况下,您可以在内部控制应该发生的情况,并让您的用户在他们认为合适的情况下覆盖界面中的方法。