Java类设计-最佳方法的建议。类扩展抽象类并实现接口

时间:2018-12-23 16:17:32

标签: java spring-mvc spring-boot interface abstract-class

不确定设计类采用哪种方法。

X.loc[:, 0] = labelencoder_X.fit_transform(X.loc[:, 0])

AbstractAuthoringEvent抽象类实现接口

public interface AuthoringEvent {
   ProcessingResultEvent authoringEvent(Event data);
}

AuthoringEventIT类扩展了抽象类

public abstract class AbstractAuthoringEvent implements AuthoringEvent {

   @Override
   public ProcessingResultEvent authoringEvent(Event data) {

       ResponseEntity<Event> resultData = callService(data);
       etc...
   }

   protected abstract ResponseEntity<Event> callService(Event requestData);

}

资源终结点类

public class AuthoringEventIT extends AbstractAuthoringEvent {

   @Autowired
   private RESTClient restClient;

   protected ResponseEntity<Event> callService(Event requestData) {

     return restClient.callWebServiceWithAction(url, httpPostMethod, requestData, Event.class);
   }
我还有另外两个相同的实现,例如Event for Venue和Organization模型类。我知道我可以删除接口并在抽象类级别上做所有事情,所有具体类都将按照自己的目的在AuthoringEventIT.class上实现,但是我的问题是...

这些抽象类是否真的需要单独的接口来实现?也许所有3个抽象类都可以用某种通用方法来实现一个Authoring接口,但是如何避免在AuthoringEventIT这样的具体类中实现扩展抽象类并需要再次实现已经在抽象类中实现的接口方法呢? 非常感谢...

1 个答案:

答案 0 :(得分:0)

在Spring框架中,一个接口具有多个实现没有问题。如果接口和最终实现之间将是一个抽象类,这将不是问题。

在这种情况下,有两种方法可以解决冲突:

  • 使用@Qualifier并加载所有实现以在运行时选择一个实现
  • 使用@Condition中的一种并加载一个取决于某些条件的实现

在第一种情况下,会是这样

@Component("authoringEventIT")
public class AuthoringEventIT extends AbstractAuthoringEvent { //code }

@Autowired
@Qualifier("authoringEventIT")
private AuthoringEvent authoringEventIT;