我应该将具有抽象方法的接口称为什么,该方法返回类的新实例?
例如,我有Foo
类,execute
是实现Parser
的{{1}}类的实例,它由实现{{1}的类创建接口。 (不是直接创建Runnable
实例,以便允许使用自定义ParserXXX
)我应该将其称为Parser
?
Parser
我想到了,但他们认为不合适:
这也是一种常见的设计模式还是反模式?
答案 0 :(得分:5)
ParserFactory
是您给出的示例中最常用的命名法,因为它与Factory Pattern非常接近。正如评论中所提到的,表达此模式的更常见方式是返回Parser
类型的对象,而不仅仅是Runnable
并调用创建Parser
createParser
的方法(或者甚至只是create
)而不是get
。通常,get
指的是获取现有对象(即私有字段保存一个值并返回,以便对get
的两次后续调用返回相同的对象,直到字段被重新分配)而不是为每个调用创建一个新对象。
例如,表达此模式的常用方法类似于以下内容:
@FunctionalInterface
interface ParserFactory {
Parser createParser(Data data);
}
使用此样式,Data
的实例可以解析如下:
Data data = // ...
ParserFactory factory = // ... using your anonymous inner-class ...
Parser parser = factory.createParser(data);
parser.run();
即使对createParser
的调用存储为Runnable
而不是Parser
,此工厂代表仍然有效,因为Parser
是Runnable
。例如,对createParser
的以下两个调用都是有效的:
Data data = // ...
ParserFactory factory = // ...
Runnable runnable = factory.createParser(data);
Parser parser = factory.createParser(data);