遇到多个构造器参数时要考虑用构建器,且看最佳实践代码
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;
//对象域抛出异常
if(this.fat>this.sodium){
throw new IllegalArgumentException("The fat must be little than sodium!!");
}
}
public static void main(String[] args)
{
NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();
System.out.println(cocaCola);
}
}
4、builder模式解决了上述问题
适应多参数,安全,方便编写,可维护性高。
5、builder实现
builder模式的一种实现方式:NutritionFacts类
对参数强加约束条件的方式。
6、builder模式缺点
为了创建对象,必须先创建它的构建器,开销增大。
实现冗长,比重叠构造器更冗长,只有在很多参数的时候才使用。
总结
本实现是builder模式的实现的一种方式。
如果类的构造器或者静态工厂中具有多个参数,设计时使用Builder模式是很好的选择。
Q:什么情况下不用??hibernate的domain
分享到:
相关推荐
《Effective Java》第三版中文版目录 第一章 介绍 1 第二章 创建和销毁对象 4 1 考虑用静态工厂方法替换构造器 4 2 当遇到多个构造器参
只有当类不包含显式构造器时,才会生成一个默认构造器,因此可以通过包含一个私有构造器来实现类的非实例化:public class UtilityClass {..
Java开发学习(六)----DI依赖注入之setter及构造器注入解析.doc
只有当类不包含显式构造方法时,才会生成一个默认构造方法,因此可以通过包含一个私有构造方法来实现类的非实例化:// 不可实例化的程序类// 禁止默认构造函数以实现
java构造方法是java类中最重要的一个概念,这篇文档涵盖了,java对象初始化过程中构造器调用的顺序,及作用。
要学习Java,你必须理解构造器。因为构造器可以提供许多特殊的方法,这个对于初学者经常混淆。但是,构造器和方法又有很多重要的区别。 我们说构造器是一种方法,就象讲澳大利亚的鸭嘴兽是一种哺育动物。(按:...
java 构造器初始化成员变量 是否提供默认构造器 继承中构造器的调用
基于java的开发源码-编译原理--LR(1)分析表构造(JAVA).zip 基于java的开发源码-编译原理--LR(1)分析表构造(JAVA).zip 基于java的开发源码-编译原理--LR(1)分析表构造(JAVA).zip 基于java的开发源码-编译...
java代码-使用java解决在Person类的基础上,添加一个带参数的构造函数,参数分别为姓名,性别,年龄的源代码 ——学习参考资料:仅用于个人学习使用!
Java面向对象(基础)-- 类的成员之三:构造器(Constructor)
JAVA构造器
声明的返回类型的任何子类都是允许的。返回对象的类也可以随每次发布而不同。EnumSet 类(详见第 36 条)没有公共构造方法,只有静态工厂。在 OpenJDK
arcmap模型构造器——批量构建金字塔,不用批量导入显示啦,减少软件的压力
构建一个类Point,它提供两个公有的构造函数,一个没有参数的Point构造函数和一个有两个double参数的构造函数。另外在该类中提供一个静态方法计算两个点的直线距离,传入参数为两个Point类实例。然后设计一个测试类...
【技术分享】WebLogic CVE-2021-2135分析及POC构造遇到的问题 法律法规 安全实践 web安全 APT 信息安全
Java入门理解构造器
没错,mysql-connector源码,也许是你需要的
第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField = "父类--静态变量"; // 变量 public String p_Field = "父类--变量"; // 静态...
java逻辑思维笔试题Effective Java - 第三版笔记 章节索引 02 - 创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 ...