//构建器抽象类,为不同类的实现提供
public interface Builder<T> {public T build();
}/*** @描述: 营养表*/
public class NutritionFacts {private final int servingSize;// requiredprivate final int servings;// requiredprivate final int calories;// optionalprivate final int fat;// optionalprivate final int sodium;// optionalprivate final int carbohydrate;// optionalpublic static class Builder1 implements Builder<NutritionFacts>{private final int servingSize;// required 食用分量private final int servings;// required (食品等的)一份private int calories;// optional 卡路里 private int fat;// optionalprivate 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;}@Overridepublic 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(240, 80).calories(100).sodium(35).carbohydrate(27).build();}
}
为非必须参数设置值,返回Build自身可以把调用链接起来
好处:
1、可以用单个builder创建多个对象,builder的参数可以在创建对象期间调整,可以随着对象不同而改变。builder可以自动填充某些域,例如每次创建对象时自动增加序号。
2、这是一个很好的抽象工厂(abstract factory)。客户端只要将这样一个builder传给方法,该方法能为客户端创建一个或多个对象。
一个通用类型的bulider
public interface Builder<T>{public T build();
}

转载于:https://www.cnblogs.com/sallet/p/4431933.html

Effective JAVA 创建和销毁对象 遇到多参构造器考虑使用构建器相关推荐

  1. Effective Java 创建和销毁对象 2.遇到多个构造器参数时要考虑用构建器

    静态工厂跟构造器都有一个共同的局限性:不能很好的扩展到大量的参数. 例: package com.example.yancy.yancy; /**  * Created by yancy on 201 ...

  2. java创建和销毁一个对象_有效的Java –创建和销毁对象

    java创建和销毁一个对象 创建和销毁对象(第2章) 这是Joshua Blochs的< 有效的Java>第2章的简短摘要.我仅包括与自己相关的项目. 静态工厂(项目1) 静态工厂与构造函 ...

  3. 有效的Java –创建和销毁对象

    创建和销毁对象(第2章) 这是Joshua Blochs的< 有效的Java>第2章的简短摘要.我仅包括与自己相关的项目. 静态工厂(项目1) 静态工厂与构造函数的一些优点: 工厂方法的名 ...

  4. Effective Java:创建和销毁对象

    前言: 读这本书第1条规则的时候就感觉到这是一本很好的书,可以把我们的Java功底提升一个档次,我还是比较推荐的.本博客是针对<Effective Java>这本书第2章所写的一篇读书笔记 ...

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

    Effective Java(1)-创建和销毁对象 转载于:https://www.cnblogs.com/Johar/p/10556218.html

  6. Effective java 总结1 - 创建和销毁对象

    Effective java 总结 - 创建和销毁对象 第1条 用静态工厂方法代替构造器 优势 静态工厂方法有名称 不必每次调用的时候创建一个新的对象 可以返回原返回类型的任何子类型对象 返回对象的类 ...

  7. 《Effective Java》学习笔记 第二章 创建和销毁对象

    第二章 创建和销毁对象 何时以及如何创建对象,何时以及如何避免创建对象,如何确保他们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作. 1 考虑用静态工厂方法代替构造器 一般在某处获取一 ...

  8. [Effective Java]第二章 创建和销毁对象

    第一章      前言 略... 第二章      创建和销毁对象 1.            考虑用静态工厂方法代替构造器 创建对象方法:一是最常用的公有构造器,二是静态工厂方法.下面是一个Bool ...

  9. Effective Java (3rd Editin) 读书笔记:1 创建和销毁对象

    1 创建和销毁对象 Item 1:考虑用静态工厂方法取代构造器 public static Boolean valueOf(boolean b) {return (b ? TRUE : FALSE); ...

  10. Effective Java读书笔记---二、创建和销毁对象

    二.创建和销毁对象 何时以及如何创建对象, 何时以及如何避免创建对象, 如何确保它们能够适时地销毁, 如何管理对象销毁之前必须进行的各种清理动作 1.用静态工厂方法代替构造器 优势: 它们有名称 不必 ...

最新文章

  1. centos加单个ip和批量添加
  2. boost::iterator_range相关的测试程序
  3. java拆装_Java自动拆装包
  4. php怎么分割页面,用html如何把页面分割成多个文件,由多个文件拼接而成?
  5. spring mvc 传中文 到controller层乱码的 解决方法
  6. 如何对一个对象进行深拷贝
  7. 通过网络连接检测计算机病毒,网络安全习题及答案
  8. 基于summernote的富文本编辑器,粘贴时去除word、html格式
  9. 关于Ajax的一揽子工程(2)
  10. Foxit PDF SDK for iOS--零基础Cordova开发
  11. php解析今日头条视频下载,今日头条视频的地址解析下载
  12. android屏幕大小字体大小,Android字体大小自适应不同分辨率的解决办法
  13. 什么是“可维护性”?
  14. js判断身份证是否合法
  15. 计算机学院毕业设计文化衫,毕业文化衫设计大赛
  16. c语言使用time函数计时,C语言中的计时方法:time
  17. 第一次独立使用大型无人船记录日志—第2天
  18. 谁开启了协同领域的潘多拉盒子?
  19. 索尼xz2android设置向导,安卓9.0上线:索尼XZ2 Premium更新喜迎全面屏新操作!
  20. 用友增资致远1200万 国内最大OA厂商发布新品

热门文章

  1. 区块链测试工具 Caliper性能测试工具是什么
  2. linux开机自动挂载ntfs,linux 开机自动挂载 NTFS 磁盘(Linux Mint、Ubuntu)[解决挂载 NTFS 后 Windows “快速启动”导致的只能只读模式挂载]...
  3. java反射 javabean_Java反射之模仿JavaBean接收表单参数.
  4. java双向链表结构_【Java数据结构】2.3双向链表的迭代实现
  5. django判断ajax,Django ajax 检测用户名是否已
  6. Leetcode之插入区间
  7. ubuntu20.4安装 mariadb 最新版
  8. IDEA 常用快捷键 常用插件 2
  9. 阶段3 3.SpringMVC·_07.SSM整合案例_03ssm整合之编写Spring框架
  10. 阶段3 2.Spring_03.Spring的 IOC 和 DI_12 注入集合数据