原文:https://blog.csdn.net/michael_f2008/article/details/77715075

  1. //Builder Pattern
  2. public class NutritionFacts{
  3. public final int servingSize;
  4. public final int servings;
  5. public final int calories;
  6. public final int fat;
  7. public final int sodium;
  8. public final int carbohydrate;
  9.  
  10. //静态内部类Builder
  11. public static class Builder{
  12. //必选变量
  13. private final int servingSize;
  14. private final int servings;
  15.  
  16. //可选变量
  17. private final int calories = 0;
  18. private final int fat = 0;
  19. private final int sodium= 0;
  20. private final int carbohydrate= 0;
  21.  
  22. //Builder的构造函数
  23. public Builder(int servingSize, int servings){
  24. this. servingSize = servingSize;
  25. this.servings = servings;
  26. }
  27.  
  28. //Builder的成员方法返回其自身,所以可以链式调用
  29. //类似于setter()方法
  30. public Builder calories(int val){
  31. calories = val;
  32. return this;
  33. }
  34. public Builder fat(int val){
  35. fat = val;
  36. return this;
  37. }
  38. public Builder sodium(int val){
  39. sodium = val;
  40. return this;
  41. }
  42. public Builder carbohydrate(int val){
  43. carbohydrate = val;
  44. return this;
  45. }
  46.  
  47. //Builder的build方法,返回外部类的实例
  48. public NutritionFacts build(){
  49. return new NutritionFacts(this);
  50. }
  51. }
  52.  
  53. //外部类的构造函数
  54. private NutritionFacts(Builder build){
  55. servingSize = build.servingSize;
  56. servings = build.servings;
  57. calories = build.calories;
  58. fat = build.fat;
  59. sodium = build.sodium;
  60. carbohydrate = build.carbohydrate;
  61. }
  62. }

示例:

NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();

Java 使用Builder解决构造函数参数过多的问题的更多相关文章

  1. 【Effective Java】2、构造参数过多的时候

    package cn.xf.cp.ch02.item2; /** * * 功能:当我们的构造参数有很多,超出可控范围的时候,用build模式 时间:下午8:25:05 文件:NutritionFact ...

  2. 《Effective Java》 读书笔记(二) 在构造参数过多的时候优先考虑使用构造器

    刚开始看见这个标题的时候,我想到了python可以选择初始化参数的语法,C++.C#能有默认参数. 为什么Java什么都没有~~ 好吧,我们是使用构造器来实现它. 1.当一个类的构造函数需要很多构造函 ...

  3. 解决: java.io.IOException: 打开的文件过多 的问题

    问题 前一阵子公司项目做了一次压力测试, 中间出现了一个问题: 在50多个并发的时候会出现 java.io.IOException: 打开的文件过多 这个异常. 但是在没有并发的时候是不会出现这个问题 ...

  4. 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

    前述:      在写这篇笔记之前,对笔记中的设计模式进行介绍:      本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式           (1)装饰(包装)设计模式口诀:         ...

  5. Tomcat9.0.13 Bug引发的java.io.IOException:(打开的文件过多 Too many open files)导致服务假死

    问题背景: 笔者所在的项目组最近把生产环境Tomcat迁移到Linux,算是顺利运行了一段时间,最近一个低概率密度的(too many open files)问题导致服务假死并停止响应客户端客户端请求 ...

  6. java中文乱码解决之道(七)-----JSP页面编码过程

    我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. <%@ page language=" ...

  7. java自定义注解实现前后台参数校验

    2016.07.26 qq:992591601,欢迎交流 首先介绍些基本概念: Annotations(also known as metadata)provide a formalized way ...

  8. clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...

  9. java将map拼接成“参数=值&参数=值”

    Java将Map拼接成"参数=值&参数=值" 把一个map的键值对拼接成"参数=值&参数=值"即"username=angusbao& ...

随机推荐

  1. python自动化测试之连接几组测试包实例

    python自动化测试之连接几组测试包实例 本文实例讲述了python自动化测试之连接几组测试包的方法,分享给大家供大家参考.具体方法如下: 具体代码如下:     class RomanNumera ...

  2. 【linux基础err】bash: cannot create temp file for here-document: No space left on device

    博主的device还有剩余空间也出现了这个问题,不知是什么原因,不过删除一些无用的内容,或者将某些有用的内容移动到其他硬盘,之后就可以正常使用了. 参考: 1. cannot create temp ...

  3. 【视频开发】【计算机视觉】doppia编译之四:安装其他库、编译和运行doppia

    (与本节内容无关///////////////////////////保存图片参数为--gui.save_all_screenshots true////////////////////)  在我们安 ...

  4. 文件上传速度查询方法(watch工具)

    由于业务迁移,需要将大量文件拷贝到目标机器上的/mnt目录,在拷贝过程中,想要查看上传的速度,做法如下:[root@mail01 ~]# du -sh /mnt5.6G /mnt[root@mail0 ...

  5. 学习数据结构Day3

    栈和队列 栈是一种线性结构,相比数组 他对应的操作是数组的子集 只能从一端进入,也只能从一端取出 这一端成为栈顶 栈是一种先进后出的数据结构,Last In First Out(LIFO) 程序调用的 ...

  6. [转帖]keepalived实现服务高可用

    keepalived实现服务高可用 https://www.cnblogs.com/clsn/p/8052649.html 第1章 keepalived服务说明 1.1 keepalived是什么? ...

  7. C语言函数库帮助文档

    C语言函数库帮助文档 安装 1.C语言库函数基本的帮助文档 sudo apt-get install manpages sudo apt-get install manpages-de sudo ap ...

  8. Python规范:代码规范要注意

    主要有以下两种代码规范 <8 号 Python 增强规范>(Python Enhacement Proposal #8),以下简称 PEP8: <Google Python 风格规范 ...

  9. Mysql中HAVING的相关使用方法

    having字句可以让我们筛选分组之后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前. 而having子句在聚合后对组记录进行筛选.我的理解就是真实表 ...

  10. VirtualBox安装文档教程

    1找到安装包双击打开 2 3 这里可以更改安装路径 4 5 6 7 等待安装 8