我是Java的初学者,我用来学习它的书似乎有一些神秘的例子和句子让我感到很困惑。
我了解接口是什么以及在现实世界中如何/在何处应用该概念。但什么是工厂方法?术语"工厂方法"是不明确的(JavaScript有不同的含义)所以我提供了该书的代码片段,以便明确我的问题。这是代码:
interface Service {
void method1();
void method2();
}
interface ServiceFactory {
Service getService();
}
Service
接口只是一个普通的接口。 ServiceFactory
界面看起来像普通界面,但它是一个"工厂方法"。那是什么?它解决了什么以及为什么要使用它们?
答案 0 :(得分:1)
工厂方法只是一种包含对象创建的方法。在您的示例中,您不是像通常那样使用new
运算符来创建而不是Service
,而是在某个对象上使用工厂方法。
ServiceFactory sf = new ServiceFactoryImpl();
// factory method
Service s = sf.getService();
为了更好地说明方法的作用,可以将其称为createService
。现在该方法封装了Service
的创建细节,您可以提供多种方法(通过重载),您可以根据上下文或传递给工厂方法的参数返回不同的子类。
答案 1 :(得分:0)
“工厂方法”是构造对象的方法。
更具体地说,该术语通常指的是一个静态方法,它返回其声明类的实例(直接实例或子类的实例)。根据我的经验,有一些情况特别常见:
所以,你的例子并不真正涉及“工厂方法”恕我直言,但你可以作弊并将getService()
描述为一个。 (相反,我只是将ServiceFactory
描述为“工厂”,并将其留在那里。)ServiceFactory.getService()
的好处与工厂方法的好处相同, plus 使用实例而不是静态方法的常见好处。