Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

logback 应用

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

JDBC实例

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

返回值是一个抽象类,必有一子类实现

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

这其中URLStreamHandler就相当于各种抽象产品,而其实现类即各种具体的产品

URLStreamHandlerFactory就相当于 VideoFactory

而如下 Factory 就相当于如 JavaVideoFactory/PythonVideoFactory

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Logback实例

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

客户端获得一个类实例的传统方式是调用由类提供的public构造器。但还有一种技术,一个类可以提供public的静态工厂方法,只是一个返回类实例的静态方法。

静态工厂方法与设计模式的工厂方法模式不同。在设计模式中并无直接等价的说法。

2 优点

只需要传入一个正确的参数,即可获取所需对象,无需知其创建细节。

2.1 实名制

如果构造器的参数本身并不能描述清楚返回的对象,那么具有确切名称的静态工厂则代码可读性更佳!


例如 BigInteger 类的构造器 BigInteger(int, int, Random) 返回值多半是质数,那么最好使用静态工厂方法: BigInteger.probablePrime


Java架构师教你写代码(一) - 使用静态工厂方法(简单工厂)替代构造器(中)

一个类只能有一个带给定签名的构造器。可 SE 一般还能通过提供两个构造器来解决,而构造器的参数列表就仅在参数类型的顺序上不同。dirty code!这样的 API,用户永远无法记住该用哪个构造器,并且最终会错误地调用不合适的构造器。不阅读类文档,使用者人根本不知道代码的作用。


而静态工厂方法有确切的名称,所以没这局限。如果一个类就是需要具有相同签名的多个构造器,那么静态工厂方法就很 nice,注意精心的命名来突出它们的区别。


上一篇:Confluence 6 从关闭的连接中恢复


下一篇:允许java运行不安全或不可信的应用程序