使用builder模式生成对象,参考示例代码
// Builder Pattern
public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
// Required parameters
private final int servingSize;
private final int servings;
// Optional parameters - initialized to default values
private int calories = 0;
private int fat = 0;
private int carbohydrate = 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 fat(int val)
{ fat = val; return this; }
public Builder carbohydrate(int val)
{ carbohydrate = val; return this; }
public Builder sodium(int val)
{ sodium = val; return this; }
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder) {
servingSize = builder.servingSize;
servings = builder.servings;
calories = builder.calories;
fat = builder.fat;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
使用构造器:
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).
calories(100).sodium(35).carbohydrate(27).build();
builder模式模拟了具名可选参数。
builder模式的不足:为了创建对象,必须先创建它的构建器,且更加冗长。
如果类的构造器或静态工厂中有多个参数,而且将来还可能增加参数,则使用builder模式就比较方便。
分享到:
相关推荐
在Esri的ArcGIS软件中,通常会使用模型构造器(Model Builder)来构建自动化的工作流程。然而,有时我们可能会遇到模型构造器不支持等间距重分类的情况,这时候,我们可以借助Python扩展库ArcPy来实现这一功能。 ...
**遇到多个构造器参数时的考虑**: - **重叠构造器模式**:这种模式下,每个构造器提供比前一个多一个参数,但是这种模式会导致构造器过多,增加复杂度。 - **JavaBeans模式**:虽然使用无参构造器并结合setter方法...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API...
2. 在编译osip2.dll时,可能遇到链接错误,因为缺少osipparser2.lib。将osipparser2.lib添加到项目目录,并在链接器设置中添加该库。 3. 成功编译后,将得到osip2.dll和osip2.lib。 配置你的项目以使用oSIP库: 1. ...
14. **函数柯里化**:这是一种将接受多个参数的函数转换为一系列接受单一参数的函数的技术,常用于预先设置部分参数,简化调用过程。 以上只是一些基础和通用的函数应用知识,具体到“实战应用遇到的函数共5页.pdf....
通过构造Hankel矩阵并执行SVD,信号被分解为多个分量,然后利用NQR信号的先验知识过滤干扰和噪声,从而提高信噪比。在此基础上,采用MUltiple SIgnal Classification (MUSIC)谱估计配合非线性最小二乘(Nonlinear ...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。...
Libra网络由多个节点组成,这些节点通过共识协议(如LibraBFT)共同维护区块链的状态。LibraCore库允许开发者与这些节点进行通信,执行智能合约,参与Libra生态系统。它封装了复杂的区块链协议,使得开发过程更为...
7. **评估与优化**:使用交叉验证或其他评估方法检查分类器的性能,根据结果调整模型参数或选择不同的特征。 实验三的文档可能包含了更详细的操作步骤、实例分析和代码实现。通过这个实验,你可以亲自动手实现...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API...
在编写高效优雅的Java程序时,我们经常遇到各种设计挑战,比如如何处理构造器参数过多的问题。在这种情况下,我们可以采用Builder模式。Builder模式是一种对象创建型设计模式,它能帮助我们构建复杂的对象,同时保持...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API...
默认构造器在没有定义其他构造器时自动生成,但也可以自定义构造器以满足特定的初始化需求。 7. 方法覆盖与重载:覆盖发生在子类中,当子类重写父类的同名方法时。方法重载则是在同一类中,通过不同的参数列表定义...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API...
javax.sound.sampled.spi 在提供新音频设备、声音文件 reader 和 writer,或音频格式转换器时,提供将为其创建子类的服务提供者的抽象类。 javax.sql 为通过 JavaTM 编程语言进行服务器端数据源访问和处理提供 API。...
2. 手工计算电路参数:设计者需要根据理论计算和经验公式确定晶体管尺寸、电阻值等关键参数,以确保放大器在模拟时能达到预期性能。 3. 仿真、分析与参数调整:利用Mentor软件进行电路仿真,检查增益、带宽、噪声等...
5. 异常处理:在"Exceptionhandling.."部分,讲解在使用HTTP客户端时可能遇到的异常以及如何处理它们。 1.3.1. HTTP传输安全:介绍如何保证HTTP传输过程中的安全性。 1.3.2. 幂等方法:解释幂等性在HTTP方法中的...
7.3.3 让方法有多个参数 163 7.4 返回值:汽车超速了吗? 164 7.4.1 写一个有返回值的方法 164 7.4.2 调用有返回值的方法 165 7.4.3 发生了什么?如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 ...
Java允许方法重载,即在同一类中可以有多个同名但参数列表不同的方法。这提供了根据输入参数自动选择合适方法的能力。 6. **构造方法**: 特殊类型的方法是构造器,它们用于初始化类的实例。构造器的名字与类名...