From c1cbb7f072bc4a963716f1e4e09577036226828f Mon Sep 17 00:00:00 2001 From: Joe <736777445@qq.com> Date: Mon, 5 Aug 2019 10:08:06 +0800 Subject: [PATCH] =?UTF-8?q?Update=2001.=20=E8=80=83=E8=99=91=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E9=9D=99=E6=80=81=E5=B7=A5=E5=8E=82=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=E6=9E=84=E9=80=A0=E6=96=B9=E6=B3=95.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/01. 考虑使用静态工厂方法替代构造方法.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md b/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md index 6acf082..7174b3b 100644 --- a/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md +++ b/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md @@ -46,7 +46,7 @@ public static Boolean valueOf(boolean b) {   服务提供者框架的一个可选的第四个组件是一个服务提供者接口,它描述了一个生成服务接口实例的工厂对象。在没有服务提供者接口的情况下,必须对实现进行反射实例化(详见第 65 条)。在 JDBC 的情况下,`Connection` 扮演服务接口的一部分,`DriverManager.registerDriver` 提供程序注册 API、`DriverManager.getConnection` 是服务访问 API,`Driver` 是服务提供者接口。 -  服务提供者框架模式有许多变种。 例如,服务访问 API 可以向客户端返回比提供者提供的更丰富的服务接口。 这是桥接模式[Gamma95]。 依赖注入框架(详见第 5 条)可以被看作是强大的服务提供者。 从 Java 6 开始,平台包含一个通用的服务提供者框架 `java.util.ServiceLoader`,所以你不需要,一般也不应该自己编写(条目 59)。 JDBC 不使用 `ServiceLoader`,因为前者早于后者。 +  服务提供者框架模式有许多变种。 例如,服务访问 API 可以向客户端返回比提供者提供的更丰富的服务接口。 这是桥接模式[Gamma95]。 依赖注入框架(详见第 5 条)可以被看作是强大的服务提供者。 从 Java 6 开始,平台包含一个通用的服务提供者框架 `java.util.ServiceLoader`,所以你不需要,一般也不应该自己编写(详见第 59 条)。 JDBC 不使用 `ServiceLoader`,因为前者早于后者。   **只提供静态工厂方法的主要限制是,没有公共或受保护构造方法的类不能被子类化。** 例如,要想将 `Collections` 框架中任何遍历的实现类进行子类化,是不可能的。但是这样也会因祸得福,因为它鼓励程序员使用组合(composition)而不是继承(详见第 18 条),并且是不可变类型锁需要的(详见第 17 条)。