关于覆盖Java的查询

时间:2013-04-12 10:49:19

标签: java

考虑我有这样的界面:

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的生命周期有些相似。所以有人可以指导我吗?或者我的设计是否复杂化?
  3. 如果您需要更多相关说明,请与我们联系。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

这是java中用于实现Builder模式的another example

答案 2 :(得分: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
}

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