gpt4 book ai didi

java - 了解实现情况

转载 作者:行者123 更新时间:2023-12-02 10:52:38 25 4
gpt4 key购买 nike

我有一个界面FileService以及它的实现 FileServiceBean

我希望能够处理多种文件类型。

例如fileService.processFile(FileDescriptor);

其中,fileDescriptor 是一个类,例如

public class FileDescriptor {
@Column(name = "FILE_TYPE")
protected String fileType;

}

然后我想要 FileServiceBean 的多个扩展来处理不同的文件类型。 FileServiceBean 将具有所有文件类型通用的所有方法。

例如

PhotoProcessingBean extends FileProcessingBean
VideoProcessingBean extends FileProcesingBean

如何让接口(interface)决定使用哪种实现?我对此很陌生,不太确定如何提出问题并在谷歌上搜索答案。

理想情况下,它不仅仅接受 FileDescriptor。例如它可能是其他东西,比如文件。

fileService.processFile(Object);

最佳答案

好吧,最终你必须将决策逻辑放在某个地方,唯一的问题是在哪里

我认为这是工厂模式的经典应用:您创建一个对象(“工厂”),其唯一目的是决定为给定情况创建公共(public)接口(interface)的哪个具体实现。请参阅https://en.wikipedia.org/wiki/Factory_method_pattern

大致如下:

PhotoProcessingBean extends FileProcessingBean {...}
VideoProcessingBean extends FileProcesingBean {...}

class FileProcessingFactory {
public static FileService createFileService(FileDescriptor descriptor) {
switch(descriptor.getFileType()) {
case 'Photo': return new PhotoProcessingBean();
case 'Video': return new VideoProcessingBean();
default: // do some error handling
}
}
}

并使用它:

for(FileDescriptor descriptor : /* wherever they come from */) {
FileService processor = FileProcessingFactory.createFileService(descriptor);
processor.processFile(descriptor);
}

果然,您还可以通过接受对象而不是文件描述符来软化界面。这取决于具体应用。

关于java - 了解实现情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52050156/

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