Merge pull request #13 from sjsdfg/sjsdfg-patch-1

Update 01. 考虑使用静态工厂方法替代构造方法.md
This commit is contained in:
Joe 2019-08-02 22:57:10 +08:00 committed by GitHub
commit b5df370624
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -48,9 +48,9 @@ public static Boolean valueOf(boolean b) {
  服务提供者框架模式有许多变种。 例如,服务访问 API 可以向客户端返回比提供者提供的更丰富的服务接口。 这是桥接模式[Gamma95]。 依赖注入框架(详见第 5 条)可以被看作是强大的服务提供者。 从 Java 6 开始,平台包含一个通用的服务提供者框架 `java.util.ServiceLoader`,所以你不需要,一般也不应该自己编写(条目 59。 JDBC 不使用 `ServiceLoader`,因为前者早于后者。
  **只提供静态工厂方法的主要限制是,没有公共或受保护构造方法的类不能被子类化。** 例如,`Collections` 框架中不可能将任何方便实现类子类化。可以说,这可能是因祸得福,因为它鼓励程序员使用组合而不是继承(详见第 18 条),并且是不可变类型(详见第 17 条)。
  **只提供静态工厂方法的主要限制是,没有公共或受保护构造方法的类不能被子类化。** 例如,要想将 `Collections` 框架中任何遍历的实现类进行子类化,是不可能的。但是这样也会因祸得福,因为它鼓励程序员使用组合composition而不是继承(详见第 18 条),并且是不可变类型锁需要的(详见第 17 条)。
  **静态工厂方法的第二个缺点是,程序员很难找到它们。** 它们不像构造方法那样在 API 文档中突出因此很难找出如何实例化一个提供静态工厂方法而不是构造方法的类。Javadoc 工具可能有一天会引起对静态工厂方法的注意。与此同时,可以通过将注意力吸引到类或接口文档中的静态工厂以及遵守通用的命名约定来减少这个问题。下面是一些静态工厂方法的常用名称。以下清单并非完整
  **静态工厂方法的第二个缺点是,程序员很难找到它们。** 它们不像构造方法那样在 API 文档中突出因此很难找出如何实例化一个提供静态工厂方法而不是构造方法的类。Javadoc 工具可能有一天会引起对静态工厂方法的注意。与此同时,可以通过将注意力吸引到类或接口文档中的静态工厂以及遵守通用的命名约定来减少这个问题。下面是一些静态工厂方法的常用名称。以下清单这是列出了其中的一小部分
- from —— A 类型转换方法,它接受单个参数并返回此类型的相应实例,例如:**Date d = Date.from(instant)**;
- of —— 一个聚合方法,接受多个参数并返回该类型的实例,并把他们合并在一起,例如:**Set\<Rank\> faceCards = EnumSet.of(JACK, QUEEN, KING)**;