java - 什么是静态工厂方法?

标签 java design-patterns factory-method

什么是“静态工厂”方法?

最佳答案

static factory method pattern是一种封装对象创建的方法。如果没有工厂方法,您只需调用类的 constructor直接:Foo x = new Foo()。使用此模式,您可以调用工厂方法:Foo x = Foo.create()。构造函数被标记为私有(private),因此除了从类内部之外不能调用它们,并且工厂方法被标记为 static这样就可以在没有对象的情况下调用它。

这种模式有一些优点。一是工厂可以从许多子类(或接口(interface)的实现者)中进行选择并返回它。这样,调用者可以通过参数指定所需的行为,而无需知道或理解潜在的复杂的类层次结构。

正如 Matthew 和 James 指出的那样,另一个优点是控制对有限资源(例如连接)的访问。这是一种实现 pools of reusable objects 的方法- 如果 build 和销毁是昂贵的过程,而不是 build 、使用和拆除一个物体,那么一次性 build 它们并回收它们可能更有意义。工厂方法可以返回一个现有的、未使用的实例化对象(如果有);或者,如果对象计数低于某个下限阈值,则构造一个对象;如果对象计数高于上限阈值,则抛出异常或返回 null

根据维基百科上的文章,多个工厂方法还允许对相似的参数类型进行不同的解释。通常,构造函数与类具有相同的名称,这意味着您只能有一个具有给定 signature 的构造函数。 。工厂没有那么受限,这意味着您可以有两种接受相同参数类型的不同方法:

Coordinate c = Coordinate.createFromCartesian(double x, double y)

Coordinate c = Coordinate.createFromPolar(double distance, double angle)

正如 Rasmus 所说,这也可以用来提高可读性。

关于java - 什么是静态工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33725469/

相关文章:

java - 使用 Tomcat 和 MySQL 的 RuntimeException

design-patterns - C# 设计模式建议

.net - 如果我有一个工厂方法,不同的实现需要不同的参数,我该怎么办?

java - 参数化工厂方法模式

java - 如何将 Eclipse GAE 标准环境应用程序转换为灵活环境?

java - 类型安全 : Unchecked cast between Class-Objects

java - 使用 Eclipse : Could not find the main class: UI. MainWindow 创建的 Jar 文件。程序将会退出

winapi - 处理 Windows 消息的更好方法?

javascript - 使用单个 handleInputChange 方法来处理多个输入字段 (React)

java - 强制子类具有特定的工厂方法或构造函数