From 1ef48d01ff6eff1d0e7b1ba07d2b9353ff15eaa7 Mon Sep 17 00:00:00 2001 From: zhili Date: Wed, 17 Jul 2019 16:09:12 +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 immutable classes 直接译成 不可变类 即可, immutable value classes 我猜测作者在此处是想强调不可变类的值是不可变的或者就是多写了一个value, 没必要译成 不可变的值类. --- docs/notes/01. 考虑使用静态工厂方法替代构造方法.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md b/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md index e2a0cc1..470d007 100644 --- a/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md +++ b/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md @@ -20,9 +20,9 @@ public static Boolean valueOf(boolean b) {   因为他们有名字,所以静态工厂方法不会受到上面讨论中的限制。在类中似乎需要具有相同签名的多个构造方法的情况下,用静态工厂方法替换构造方法,并仔细选择名称来突出它们的差异。 -  **静态工厂方法的第二个优点是,与构造方法不同,它们不需要每次调用时都创建一个新对象。** 这允许不可变的类 (详见第 17 条)使用预先构建的实例,或者在构造时缓存实例,并反复分配它们以避免创建不必要的重复对象。`Boolean.valueof(boolean)` 方法说明了这种方法:它从不创建对象。这种技术类似于 `Flyweight` 模式[Gamma95]。如果经常请求等价对象,那么它可以极大地提高性能,特别是在创建它们的代价非常昂贵的情况下。 +  **静态工厂方法的第二个优点是,与构造方法不同,它们不需要每次调用时都创建一个新对象。** 这允许不可变类 (详见第 17 条)使用预先构建的实例,或者在构造时缓存实例,并反复分配它们以避免创建不必要的重复对象。`Boolean.valueof(boolean)` 方法说明了这种方法:它从不创建对象。这种技术类似于 `Flyweight` 模式[Gamma95]。如果经常请求等价对象,那么它可以极大地提高性能,特别是在创建它们的代价非常昂贵的情况下。 -  静态工厂方法从重复调用返回相同对象的能力允许类保持在任何时候存在的实例的严格控制。这样做的类被称为实例控制(instance-controlled)。编写实例控制类的原因有很多。实例控制允许一个类来保证它是一个单例(详见第 3 条)项或不可实例化的(详见第 4 条)。同时,它允许一个不可变的值类(详见第 17 条)保证不存在两个相同的实例:当且仅当 `a == b` 时 `a.equals(b)`。这是享元模式的基础[Gamma95]。`Enum` 类型(详见第 34 条)提供了这个保证。 +  静态工厂方法从重复调用返回相同对象的能力允许类保持在任何时候存在的实例的严格控制。这样做的类被称为实例控制(instance-controlled)。编写实例控制类的原因有很多。实例控制允许一个类来保证它是一个单例(详见第 3 条)项或不可实例化的(详见第 4 条)。同时,它允许一个不可变类(详见第 17 条)保证不存在两个相同的实例:当且仅当 `a == b` 时 `a.equals(b)`。这是享元模式的基础[Gamma95]。`Enum` 类型(详见第 34 条)提供了这个保证。   **静态工厂方法的第三个优点是,与构造方法不同,它们可以返回其返回类型的任何子类型的对象。** 这为你在选择返回对象的类时提供了很大的灵活性。