You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何命名返回类新实例的接口?以Java Parser场景为例

给创建实例的接口命名的最佳实践

嘿,这个问题其实是典型的工厂模式场景下的接口命名问题,咱们结合你的代码场景来拆解最合适的命名方案~

首先,你的这个接口核心职责是根据传入的Data参数,创建并返回Parser(或其实现的Runnable)实例,属于带参数的对象创建型接口,Java生态里有几种非常通用且语义清晰的命名方式:

1. 最通用的选择:ParserFactory

Factory是Java里约定俗成的工厂类/接口后缀,只要看到这个名字,所有人都能立刻明白它的职责是创建Parser实例。

优化后的代码示例(建议把返回类型从Runnable改成Parser,语义更明确,调用方需要Runnable时也能兼容):

@FunctionalInterface // 适用于Java 8+
interface ParserFactory {
    Parser createParser(Data data); // 把get改成createParser,语义更直观
}

// 你的Parser类保持不变
class Parser implements Runnable {
    // 构造方法可以接收Data参数
    public Parser(Data data) {
        // 初始化逻辑
    }

    @Override
    public void run() {
        // 执行解析逻辑
    }
}

在Foo类里的使用示例:

class Foo {
    private final ParserFactory parserFactory;

    // 通过依赖注入传入工厂,实现解耦
    public Foo(ParserFactory parserFactory) {
        this.parserFactory = parserFactory;
    }

    public void executeParsing(Data data) {
        Runnable parser = parserFactory.createParser(data);
        parser.run();
    }
}

// 自定义Parser的工厂实现
class CsvParserFactory implements ParserFactory {
    @Override
    public Parser createParser(Data data) {
        return new CsvParser(data); // 假设CsvParser是Parser的自定义子类
    }
}

2. 轻量场景的选择:ParserProvider

如果你的接口更偏向“提供预定义或按需生成的Parser实例”,而非复杂的创建逻辑,Provider后缀也是不错的选择。这个命名在Java的一些框架里很常见,语义上更强调“提供”而非“构建”。

示例代码:

@FunctionalInterface
interface ParserProvider {
    Parser provideParser(Data data);
}

小建议:优化方法名

不管选哪个接口名,都建议把原来的get改成更具语义的方法名,比如createParserprovideParser,比模糊的get更能体现“创建实例”的核心行为。

内容的提问来源于stack exchange,提问作者ylem

火山引擎 最新活动