【发布时间】:2021-11-16 08:02:58
【问题描述】:
我正在尝试使用多种方法实现 java 可调用 而我的情况是这样的:
interface FsHandler {
boolean existDirectory();
boolean existFile(File);
...
}
interface FileHandler {
void write(byte[]);
void read(byte[]);
...
}
所有这些方法都由不同的存储后端实现,例如本地文件系统、aws s3 等
在寻找并行化此代码的方法时,我尝试使用 callable,但如果我理解正确,我需要在许多实现 callable 的小型抽象类中打破我的接口 - 每个方法一个,然后使用 callable,更不用说我仍然需要找到一种方法将调用添加到阻塞队列(使用执行器)
所以,我的疑问是:
- 是否可以在已经存在/实现的方法上包装可调用对象?
- 另一种思路是为每个需要实现可调用的方法创建一个抽象类,然后使用策略模式来决定使用哪个实现
例如:
interface WriteStrategy implements Callable<Void> {
Void call();
void write(byte[]);
static WriteStrategy localFSStrategy(){...}
static WriteStrategy S3Strategy() {...}
class FileHandler {
private WriteStrategy strategy;
public FileHandler(WriteStrategy strategy) {...}
public void write(byte[]) { strategy.call(); }
}
我仍然不确定如何处理它:'(
【问题讨论】:
标签: java design-patterns callable