1

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

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()例如等等。

我的问题是:

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

如果您需要更多关于相同的说明,请告诉我。

编辑: 注意:如果您觉得我正在尝试重新发明轮子,您能否为上述要求提出任何替代方案?

4

3 回答 3

1

您可以在方法中使用一个参数来控制POJO对象。
另一方面,有很多现成的框架可供使用,而不是创建自己的,为什么要再次发明轮子?

于 2013-04-12T10:56:14.093 回答
1

这个问题是“逐步创建对象”。这是由Builder Pattern解决的。

这是Java中实现Builder模式的另一个示例

于 2013-04-12T11:00:31.897 回答
1

首先,我认为您应该像在大多数测试框架中看到的那样使用注释:

@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
}

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

于 2013-04-12T11:02:10.043 回答