本文共 1484 字,大约阅读时间需要 4 分钟。
实例化对象时,构造器的自变量有时候会不定,即有有多个可选参数时,可重载构造器,但是有时候在问题模型中,某种类型的构造器是后期出现的,随着情况的不同,可能会添加多个构造器,这时候,代码很难维护。同时,客户端调用时,不便于阅读和使用(重载太多)
替代方案一:JavaBean模式
调用无参数构造函数,然后通过setter方法设置必要的参数。但是可能的缺点:由可能存在的JavaBean状态不一致导致的线程安全问题。
替代方案二:Builder模式
实例代码
package com.xl.chap1;public class BuilderMain { // 必须的字段 private final int servingSize; private final int servings; // 可选字段 private int calories = 0; private int fat = 0; private int carbohyrate = 0; private int sodium = 0; public BuilderMain(Builder builder) { // 运行期初始化常量 this.servingSize = builder.servingSize; this.servings = builder.servings; this.calories = builder.calories; this.fat = builder.fat; this.carbohyrate = builder.carbohyrate; this.sodium = builder.sodium; } public static class Builder { private final int servingSize; private final int servings; private int calories = 0; private int fat = 0; private int carbohyrate = 0; private int sodium = 0; public Builder(int servingSize, int servings) { this.servingSize = servingSize; this.servings = servings; } public Builder calories(int val) { calories = val; return this; } public Builder carbohydrate(int val) { carbohyrate = val; return this; } public Builder sodium(int val) { sodium = val; return this; } public BuilderMain build() { return new BuilderMain(this); } } public static void main(String[] args) { BuilderMain bm = new BuilderMain.Builder(240, 8).calories(100) .sodium(35).carbohydrate(27).build(); }}当构造器参数可选时,可考虑采用Builder模式来处理。
转载地址:http://crlbi.baihongyu.com/