update: 2. 当构造方法参数过多时使用 builder 模式

This commit is contained in:
sjsdfg 2019-04-05 16:53:28 +08:00
parent e5fec3ce9b
commit 4b59b63729

View File

@ -174,7 +174,7 @@ NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
  为了简洁起见,省略了有效性检查。 要尽快检测无效参数,检查 builder 的构造方法和方法中的参数有效性。 在 `build` 方法调用的构造方法中检查包含多个参数的不变性。为了确保这些不变性不受攻击,在从 builder 复制参数后对对象属性进行检查(条目 50。 如果检查失败,则抛出 `IllegalArgumentException` 异常(条目 72其详细消息指示哪些参数无效条目 75
  Builder 模式非常适合类层次结构。 使用平行层次的 builder每个嵌套在相应的类中。 抽象类有抽象的 builder; 具体的类有具体的 builder。 例如,考虑代表各种比萨饼的根层次结构的抽象类:
  Builder 模式非常适合类层次结构。 使用平行层次的 builder每个嵌套在相应的类中。 抽象类有抽象的 builder具体的类有具体的 builder。 例如,考虑代表各种比萨饼的根层次结构的抽象类:
```java
// Builder pattern for class hierarchies
@ -267,9 +267,9 @@ public class Calzone extends Pizza {
}
```
  请注意,每个子类 builder 中的 `build` 方法被声明为返回正确的子类:`NyPizza.Builder` 的 `build` 方法返回 `NyPizza`,而 `Calzone.Builder` 中的 `build` 方法返回 `Calzone`。 这种技术,其一个子类的方法被声明为返回在超类中声明的返回类型的子类型,称为协变返回类型 ( covariant return typing)。 它允许客户端使用这些 builder而不需要强制转换。
  请注意,每个子类 builder 中的 `build` 方法被声明为返回正确的子类:`NyPizza.Builder` 的 `build` 方法返回 `NyPizza`,而 `Calzone.Builder` 中的 `build` 方法返回 `Calzone`。 这种技术,其一个子类的方法被声明为返回在超类中声明的返回类型的子类型,称为协变返回类型covariant return typing。 它允许客户端使用这些 builder而不需要强制转换。
  这些「分层 builder」的客户端代码基本上与简单的 `NutritionFacts` builder 的代码相同。为了简洁起见,下面显示的示例客户端代码假设枚举常量的静态导入:
  这些「分层 builderhierarchical builders」的客户端代码基本上与简单的 `NutritionFacts` builder 的代码相同。为了简洁起见下面显示的示例客户端代码假设枚举常量的静态导入:
```java
NyPizza pizza = new NyPizza.Builder(SMALL)