Java 使用Builder解决构造函数参数过多的问题
原文:https://blog.csdn.net/michael_f2008/article/details/77715075
- //Builder Pattern
- public class NutritionFacts{
- public final int servingSize;
- public final int servings;
- public final int calories;
- public final int fat;
- public final int sodium;
- public final int carbohydrate;
- //静态内部类Builder
- public static class Builder{
- //必选变量
- private final int servingSize;
- private final int servings;
- //可选变量
- private final int calories = 0;
- private final int fat = 0;
- private final int sodium= 0;
- private final int carbohydrate= 0;
- //Builder的构造函数
- public Builder(int servingSize, int servings){
- this. servingSize = servingSize;
- this.servings = servings;
- }
- //Builder的成员方法返回其自身,所以可以链式调用
- //类似于setter()方法
- public Builder calories(int val){
- calories = val;
- return this;
- }
- public Builder fat(int val){
- fat = val;
- return this;
- }
- public Builder sodium(int val){
- sodium = val;
- return this;
- }
- public Builder carbohydrate(int val){
- carbohydrate = val;
- return this;
- }
- //Builder的build方法,返回外部类的实例
- public NutritionFacts build(){
- return new NutritionFacts(this);
- }
- }
- //外部类的构造函数
- private NutritionFacts(Builder build){
- servingSize = build.servingSize;
- servings = build.servings;
- calories = build.calories;
- fat = build.fat;
- sodium = build.sodium;
- carbohydrate = build.carbohydrate;
- }
- }
示例:
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(100).sodium(35).carbohydrate(27).build();
Java 使用Builder解决构造函数参数过多的问题的更多相关文章
- 【Effective Java】2、构造参数过多的时候
package cn.xf.cp.ch02.item2; /** * * 功能:当我们的构造参数有很多,超出可控范围的时候,用build模式 时间:下午8:25:05 文件:NutritionFact ...
- 《Effective Java》 读书笔记(二) 在构造参数过多的时候优先考虑使用构造器
刚开始看见这个标题的时候,我想到了python可以选择初始化参数的语法,C++.C#能有默认参数. 为什么Java什么都没有~~ 好吧,我们是使用构造器来实现它. 1.当一个类的构造函数需要很多构造函 ...
- 解决: java.io.IOException: 打开的文件过多 的问题
问题 前一阵子公司项目做了一次压力测试, 中间出现了一个问题: 在50多个并发的时候会出现 java.io.IOException: 打开的文件过多 这个异常. 但是在没有并发的时候是不会出现这个问题 ...
- 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ...
- Tomcat9.0.13 Bug引发的java.io.IOException:(打开的文件过多 Too many open files)导致服务假死
问题背景: 笔者所在的项目组最近把生产环境Tomcat迁移到Linux,算是顺利运行了一段时间,最近一个低概率密度的(too many open files)问题导致服务假死并停止响应客户端客户端请求 ...
- java中文乱码解决之道(七)-----JSP页面编码过程
我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. <%@ page language=" ...
- java自定义注解实现前后台参数校验
2016.07.26 qq:992591601,欢迎交流 首先介绍些基本概念: Annotations(also known as metadata)provide a formalized way ...
- clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...
- java将map拼接成“参数=值&参数=值”
Java将Map拼接成"参数=值&参数=值" 把一个map的键值对拼接成"参数=值&参数=值"即"username=angusbao& ...
随机推荐
- python自动化测试之连接几组测试包实例
python自动化测试之连接几组测试包实例 本文实例讲述了python自动化测试之连接几组测试包的方法,分享给大家供大家参考.具体方法如下: 具体代码如下: class RomanNumera ...
- 【linux基础err】bash: cannot create temp file for here-document: No space left on device
博主的device还有剩余空间也出现了这个问题,不知是什么原因,不过删除一些无用的内容,或者将某些有用的内容移动到其他硬盘,之后就可以正常使用了. 参考: 1. cannot create temp ...
- 【视频开发】【计算机视觉】doppia编译之四:安装其他库、编译和运行doppia
(与本节内容无关///////////////////////////保存图片参数为--gui.save_all_screenshots true////////////////////) 在我们安 ...
- 文件上传速度查询方法(watch工具)
由于业务迁移,需要将大量文件拷贝到目标机器上的/mnt目录,在拷贝过程中,想要查看上传的速度,做法如下:[root@mail01 ~]# du -sh /mnt5.6G /mnt[root@mail0 ...
- 学习数据结构Day3
栈和队列 栈是一种线性结构,相比数组 他对应的操作是数组的子集 只能从一端进入,也只能从一端取出 这一端成为栈顶 栈是一种先进后出的数据结构,Last In First Out(LIFO) 程序调用的 ...
- [转帖]keepalived实现服务高可用
keepalived实现服务高可用 https://www.cnblogs.com/clsn/p/8052649.html 第1章 keepalived服务说明 1.1 keepalived是什么? ...
- C语言函数库帮助文档
C语言函数库帮助文档 安装 1.C语言库函数基本的帮助文档 sudo apt-get install manpages sudo apt-get install manpages-de sudo ap ...
- Python规范:代码规范要注意
主要有以下两种代码规范 <8 号 Python 增强规范>(Python Enhacement Proposal #8),以下简称 PEP8: <Google Python 风格规范 ...
- Mysql中HAVING的相关使用方法
having字句可以让我们筛选分组之后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前. 而having子句在聚合后对组记录进行筛选.我的理解就是真实表 ...
- VirtualBox安装文档教程
1找到安装包双击打开 2 3 这里可以更改安装路径 4 5 6 7 等待安装 8