//构建器抽象类,为不同类的实现提供
public interface Builder<T> {
public T build();
} /**
* @描述: 营养表
*/
public class NutritionFacts {
private final int servingSize;// required
private final int servings;// required
private final int calories;// optional
private final int fat;// optional
private final int sodium;// optional
private final int carbohydrate;// optional public static class Builder1 implements Builder<NutritionFacts>{
private final int servingSize;// required 食用分量
private final int servings;// required (食品等的)一份
private int calories;// optional 卡路里
private int fat;// optional
private int sodium;// optional 钠
private int carbohydrate;// optional 碳水化合物;糖类
public Builder1(int servingSize,int servings){
this.servingSize = servingSize;
this.servings = servings;
}
public Builder1 calories(int calories) {
this.calories = calories;
return this;
}
public Builder1 fat(int fat) {
this.fat = fat;
return this;
}
public Builder1 sodium(int sodium) {
this.sodium = sodium;
return this;
}
public Builder1 carbohydrate(int carbohydrate) {
this.carbohydrate = carbohydrate;
return this;
}
@Override
public NutritionFacts build() {
return new NutritionFacts(this);
} } private NutritionFacts(Builder1 builder){
this.servingSize = builder.servingSize;
this.servings = builder.servings;
this.calories = builder.calories;
this.fat = builder.fat;
this.sodium = builder.sodium;
this.carbohydrate = builder.carbohydrate;
} public static void main(String[] args) {
NutritionFacts cocacola = new NutritionFacts.Builder1(, ).calories().sodium().carbohydrate().build();
}
}
为非必须参数设置值,返回Build自身可以把调用链接起来
好处:
、可以用单个builder创建多个对象,builder的参数可以在创建对象期间调整,可以随着对象不同而改变。builder可以自动填充某些域,例如每次创建对象时自动增加序号。
、这是一个很好的抽象工厂(abstract factory)。客户端只要将这样一个builder传给方法,该方法能为客户端创建一个或多个对象。
一个通用类型的bulider
public interface Builder<T>{
public T build();
}

Effective JAVA 创建和销毁对象 遇到多参构造器考虑使用构建器的更多相关文章

  1. [Effective Java] 创建和销毁对象篇

    [Effective Java] 创建和销毁对象篇 1. 优先考虑用静态工厂方法代替构造器 优点: - 静态工厂方法相比于构造器,它们有名称 - 不需要每次在使用的时候创建一个对象 - 可以返回原返回 ...

  2. Effective Java 创建和销毁对象

    <Effective Java>阅读笔记,用适合自己理解的方式提炼该书内容.<Effective Java>是一本很实用的书,阅读方法应该是快速的领会,总结,然后应用.而非,一 ...

  3. JAVA创建和销毁对象

    类静态方法取代构造方法创建对象 类静态方法有名称,可以通过名称说明返回的是什么类型的实例 可以控制是否需要新开辟内存空间 返回值是可以控制的 实体类属性非常多的时候使用build模式创建对象 单例实体 ...

  4. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  5. effective java读书小记(一)创建和销毁对象

    序言 <effective java>可谓是java学习者心中的一本绝对不能不拜读的好书,她对于目标读者(有一点编程基础和开发经验)的人来说,由浅入深,言简意赅.每一章节都分为若干的条目, ...

  6. 和我一起学Effective Java之创建和销毁对象

    前言 主要学习创建和销毁对象: 1.何时以及如何创建对象 2.何时以及如何避免创建对象 3.如何确保它们能够适时地销毁 4.如何管理对象销毁之前必须进行的清理动作 正文 一.用静态工厂方法代替构造器 ...

  7. Effective Java(1)-创建和销毁对象

    Effective Java(1)-创建和销毁对象

  8. 《Effective Java》读书笔记(一)之创建和销毁对象

    最近在研读<Effective Java>一书,读书不做点笔记,感觉很容易就忘掉,于是用本篇博客来记录阅读此书的笔记. 郑重声明: 由于是<Effective Java>一书的 ...

  9. 《Effective Java》—— 创建与销毁对象

    本篇主要总结的是<Effecticve Java>中关于创建和销毁对象的内容. 比如: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保及时销毁 如何管理对象销毁前的清理动作 考虑 ...

随机推荐

  1. glRotatef 转动方向

    http://blog.sina.com.cn/s/blog_3c6889fe0100qko6.html glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLf ...

  2. android hook 框架 ADBI 如何实现so注入

    Android so注入-libinject2 简介.编译.运行 Android so注入-libinject2  如何实现so注入 Android so注入-Libinject 如何实现so注入 A ...

  3. 【原创】Win7 IE故障:APPCRASH,d3d9.dll,c0000005

    问题 今天使用使用IE登录某网址,发现总是报错,如下图,无法浏览. 解决方案 主要讲IE的呈现方案修改即可,如下步骤: 在IE的[Internet选项]选择[高级]选项卡,在[加速的图形]中勾选[使用 ...

  4. CentOS系统最小化安装没有wget解决方案

    -bash: wget: command not found的两种解决方法 今天给服务器安装新LNMP环境时,wget 时提示 -bash:wget command not found,很明显没有安装 ...

  5. Laravel使用db:seed生成测试数据

    创建 生成数据 定义字段 call方法调用 执行 seeder里如有多个可指定class 整理自www.laravist.com 视频教程

  6. 这篇 感觉很实用--DJANGO ORM

    Django之model F/Q以及多对多操作 http://www.cnblogs.com/ccorz/p/5882400.html model之F/Q操作 F操作,使用查询条件的值 打个比方吧,有 ...

  7. 微信小程序实现豆瓣读书

    个人练习项目,使用了scss+webstorm watcher来处理样式.整体上没有什么难点. github:https://github.com/axel10/wx-douban-read

  8. SpringCloud简介(一)

    一.SpringCloud简介 SpringCloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.负载均衡.微代理.事件总线.全局锁.决策竞选.分布式会话等等 ...

  9. Maven笔记:

    启动tomcat的时候报这样的错误:java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncoding ...

  10. 【高精度】高精度数除以低精度数I

    问题 G: [高精度]高精度数除以低精度数I 时间限制: 1 Sec  内存限制: 512 MB提交: 173  解决: 71[提交] [状态] [讨论版] [命题人:] 题目描述 修罗王聚集了庞大的 ...