gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:42 24 4
gpt4 key购买 nike

不确定设计类(class)应采取什么方法。

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

AbstractAuthoringEvent抽象类实现接口(interface)

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);

}

AuthoringEventIT 类扩展了抽象类

public class AuthoringEventIT extends AbstractAuthoringEvent {

@Autowired
private RESTClient restClient;

protected ResponseEntity<Event> callService(Event requestData) {

return restClient.callWebServiceWithAction(url, httpPostMethod, requestData, Event.class);
}

资源端点类

@Autowired
private AuthoringEventIT authoringEventIT;

@PostMapping()
public ResponseEntity<Event> authorEvent(@RequestBody final EventRequest request) {

ProcessingResultEvent responseData = authoringEventIT.authoringEvent(request);

return responseData.getProcessedData();
}

我还有另外 2 个相同的实现,例如 Event for Venue 和 Organization 模型类。我知道我可以删除接口(interface)并在抽象类级别上完成所有操作,所有具体类都将按照 AuthoringEventIT.class 上的目的实现它们,但我的问题是...

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

最佳答案

在Spring框架中,一个接口(interface)有多个实现是没有问题的。如果接口(interface)和最终实现之间是一个抽象类,那么这不是问题。

解决这种情况下的冲突有两种方法:

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

第一种情况是这样的

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

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

关于Java 类设计 - 最佳方法的建议。类扩展抽象类并实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com