链式编程:遇到多个构造器参数(Constructor Parameters)时要考虑用构建器(Builder)
- 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 {
- // 必要参数
- private final int servingSize;
- private final int servings;
- // 可选参数
- 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;//返回Builder类对象本身,以便把调用链接起来
- }
- 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;
- }
- @Override
- public String toString() {
- return "[" +
- "servingSize:" + servingSize +
- ",servings:" + servings +
- ",calories:" + calories +
- ",fat:" + fat +
- ",sodium:" + sodium +
- ",carbohydrate:" + carbohydrate +
- "]";
- }
- public static void main(String[] args) {
- NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
- .calories(100).sodium(35).carbohydrate(27).build();
- System.out.println(cocaCola);
- }
- }
构造Map
- package com.jt.mongo.demo.basic.util;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 构建拥有多个值的Map(简化map操作):<br/>
- * map = ParamBuilder.of().withParam().withParam().withParam().build();.
- *
- * @author weihainan.
- * @since 0.1 created on 2017/2/8.
- */
- public final class ParamBuilder {
- private Map<String, Object> paramMap = new HashMap<>(6);
- private ParamBuilder() {
- // empty
- }
- /**
- * 获取ParamBuilder对象.
- */
- public static ParamBuilder of(){
- return new ParamBuilder();
- }
- /**
- * 获取ParamBuilder对象并设置一对key-value.
- */
- public static ParamBuilder of(String paramName, Object paramValue) {
- return new ParamBuilder().withParam(paramName, paramValue);
- }
- /**
- * 设置参数,可多次操作.
- */
- public ParamBuilder withParam(String paramName, Object paramValue) {
- paramMap.put(paramName, paramValue);
- return this;
- }
- /**
- * 获取最终的map.
- */
- public Map<String, Object> build() {
- return paramMap;
- }
- }
链式编程:遇到多个构造器参数(Constructor Parameters)时要考虑用构建器(Builder)的更多相关文章
- 遇到多个构造器参数时要考虑用构建器 builder 模式 JavaBean 线程安全
effective java p9 JavaBeans模式阻止了把类做成不可变的可能,这需要程序员付出额外的努力来确保它的线程安全.
- 从零开始学 Web 之 jQuery(七)事件冒泡,事件参数对象,链式编程原理
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- iOS开发技巧系列---使用链式编程和Block来实现UIAlertView
UIAlertView是iOS开发过程中最常用的控件之一,是提醒用户做出选择最主要的工具.在iOS8及后来的系统中,苹果更推荐使用UIAlertController来代替UIAlertView.所以本 ...
- 由表单验证说起,关于在C#中尝试链式编程的实践
在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的htt ...
- ASP.NET MVC学前篇之扩展方法、链式编程
ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...
- ios的链式编程笔记
1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数 > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...
- Objective-C 链式编程思想
链式编程思想 链式编程是什么 链式编程就是将调用多个方法用点语法连接起来,让代码更加简洁和可读性更高刚开始接触链式编程是Masonry,用起来真的非常爽 1 make.left.right.top.e ...
- jQuery插件编写及链式编程模型
jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...
- (一一八)利用block实现链式编程
有些时候需要不断地调用方法,如果使用传统方案,需要拿到对象多次调用,例如有一个Ball对象,实现了up.down.left.right四个方法,分别控制球的运动方向,如果要实现球向右再向下,需要这么写 ...
随机推荐
- 为MAC配置终端环境iTerm2+Zsh+oh-my-zsh
首先展示下我的终端吧. 这就是我们为什么要配置iTerm2+Zsh+oh-my-zsh环境的原因: 我们使用zsh解释器,当然等你使用 zsh时就会知道zsh与bash对比的强大之处了. 至于我们的g ...
- Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock
在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...
- DBCC--常用跟踪标记
使用DBCC TRACEON 和DBCC TRACEOFF来打开和关闭跟踪标记 使用DBCC TRACESTATUS来查看所有打开的跟踪标记 --260:打印关于扩展存储过程动态链接库的版本信息 -- ...
- Docker容器的原理与实践 (下)
欢迎访问网易云社区,了解更多网易技术产品运营经验. Docker原理分析 Docker架构 镜像原理 镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容Docker以镜像和在镜 ...
- 一文看尽 Raft 一致性协议的关键点
本文由 网易云 发布. 作者:孙建良 Raft 协议的发布,对分布式行业是一大福音,虽然在核心协议上基本都是师继 Paxos 祖师爷(Lamport) 的精髓,基于多数派的协议.但是 Raft 一致 ...
- s11 day104 数据库表结构与立即支付流程
数据库表结构: 13张 1. 课程大类 2.课程子类 3.学位课程 4.老师表 5.奖学金 6.专题课 7.课程详情 8.课程大纲 9.常见问题 10.章节 11.课时 12.作业表 13.价格策略 ...
- [LeetCode] Minimum Number of K Consecutive Bit Flips 连续K位翻转的最小次数
In an array A containing only 0s and 1s, a K-bit flip consists of choosing a (contiguous) subarray o ...
- centos7 虚拟机中,网卡不启动的解决方式
使用NAT模式的虚拟centos, 只显示两个网卡,无法连接外网, 输入systemctl start network后报错信息" Restarting network (via syste ...
- 配置国内的maven仓库
MAVEN中央仓库 国内 配置Maven中央仓库路径的方法如下: 在Maven文件的conf目录中打开settings.xml文件 在文件中的servers节点和mirror节点中加入如下内容 华为云 ...
- Java Web相关技术(汇聚页)
Java Web相关技术(汇聚页) 初学Java Web(2)——搭建Java Web开发环境