首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java接口上下文中的“工厂方法设计模式”

Java接口上下文中的“工厂方法设计模式”
EN

Stack Overflow用户
提问于 2016-08-03 05:14:02
回答 2查看 858关注 0票数 1

我是Java的初学者,我用来学习的书似乎有一些神秘的例子和句子,完全让我感到困惑。

我理解什么是接口,以及如何/在实际世界中应用这个概念。但是工厂的方法是什么呢?术语“工厂方法”是模棱两可的(JavaScript对此有不同的含义),因此,为了澄清我的问题,我提供了这本书中的片段。以下是代码:

代码语言:javascript
复制
interface Service {
    void method1();
    void method2();
}

interface ServiceFactory {
    Service getService();
}

Service接口只是一个普通的接口。ServiceFactory接口看起来像一个正常的接口,但它是一个“工厂方法”。那是什么?它能解决什么问题,为什么我要使用它们?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-03 05:25:12

“工厂方法”是构造对象的方法。

更具体地说,术语通常指的是一个静态方法,它返回其声明类的一个实例(一个直接实例,或者一个子类实例)。根据我的经验,在一些情况下,这种做法特别常见:

  • 如果您需要有多个不同的构造函数,那么使用工厂方法可以为它们指定适当的名称(而对不同构造函数的调用只能通过参数类型来区分,而这种类型并不总是显而易见的)。
  • 如果您需要有几个作为入口点的单个抽象类的不同实现,那么工厂方法可以实例化适当的子类型。
  • 如果您需要任何类型的缓存逻辑或共享实例,那么工厂方法可以处理它,并在适当情况下返回一个已经存在的实例。
  • 如果您需要做一些副作用方面的工作,可以用这样的方式命名工厂方法,以便更清楚地了解这些副作用是什么。

因此,您的示例并不真正涉及“工厂方法”IMHO,但您可以稍微欺骗一下,并将getService()描述为其中的一个。(相反,我只想把ServiceFactory描述为“工厂”。)ServiceFactory.getService()的好处与工厂方法的好处相同,加上拥有实例而不是静态方法的通常好处。

票数 0
EN

Stack Overflow用户

发布于 2016-08-03 05:24:40

工厂方法是一个简单的方法,它包围了一个对象的创建。在您的示例中,您没有像通常那样使用new操作符来创建一个代替Service,而是在某些对象上使用了工厂方法。

代码语言:javascript
复制
ServiceFactory sf = new ServiceFactoryImpl();
// factory method
Service s = sf.getService();

为了更好地说明该方法的作用,可以将其称为createService。现在,该方法封装了创建Service的细节,您可以提供多种类型的方法(通过重载),您可以让它根据上下文或传递给工厂方法的参数返回不同的子类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38734887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档