调用类的不同实现

时间:2014-07-07 14:27:55

标签: java design-patterns

我有2个不同的接口KafkaMetricsReporter实现,将其命名为implementation1implementation2。每个实现都有start方法,它开始很少的线程。

从另一个类我必须实例化implementation1implementation2,然后运行每个类的start方法。虽然我可以在给定的类中逐个执行,但是有更简洁的方法来执行此操作,以便将来如果我必须添加一个更多的实现,那么这样做会更容易。 请给我一些指示。

更正:KafkaMetricsReporter是一个界面

3 个答案:

答案 0 :(得分:5)

这是你在找什么?不确定我是否理解Q.

KafkaMetricsReporter[] kmrs = new KafkaMetricsReporter[]{
    new implementation1(),
    new implementation2()
};

for( KafkaMetricsReporter kmr: kmrs ){
    kmr.start();
}

答案 1 :(得分:2)

有一种更清洁和传统的方式。那是Programming with Interfaces

使用start()方法创建一个接口,让其他两个类实现它。

修改 如果它是一个接口,你几乎需要一个小代码。将所有引用放在List / Array / Any容器中。

只需循环播放

for( KafkaMetricsReporter  kmr : yourListorArray){
          kmr.start(); 
}

该调用的所有实例都是启动方法。

答案 2 :(得分:0)

在客户端代码中,您可以直接引用该接口。例如:

public class Impl1 implements KafkaMetricsReporter {
 //...
}
public class Impl2 implements KafkaMetricsReporter {
}

class Client {
  public method() {
    KafkaMetricsReporter reporter1 = new Impl1();
    KafkaMetricsReporter reporter2 = new Impl2();

    reporter1.start();
    reporter2.start();
  }
}