如何命名返回类新实例的接口?以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改成更具语义的方法名,比如createParser、provideParser,比模糊的get更能体现“创建实例”的核心行为。
内容的提问来源于stack exchange,提问作者ylem




