1.  
  1. public class NutritionFacts {
  2.  
  3. private final int servingSize;
  4. private final int servings;
  5. private final int calories;
  6. private final int fat;
  7. private final int sodium;
  8. private final int carbohydrate;
  9.  
  10. // 构造器,静态内部类
  11. public static class Builder {
  12. // 必要参数
  13. private final int servingSize;
  14. private final int servings;
  15. // 可选参数
  16. private int calories = 0;
  17. private int fat = 0;
  18. private int carbohydrate = 0;
  19. private int sodium = 0;
  20.  
  21. public Builder(int servingSize, int servings) {
  22. this.servingSize = servingSize;
  23. this.servings = servings;
  24. }
  25.  
  26. public Builder calories(int val) {
  27. calories = val;
  28. return this;//返回Builder类对象本身,以便把调用链接起来
  29. }
  30.  
  31. public Builder fat(int val) {
  32. fat = val;
  33. return this;
  34. }
  35.  
  36. public Builder carbohydrate(int val) {
  37. carbohydrate = val;
  38. return this;
  39. }
  40.  
  41. public Builder sodium(int val) {
  42. sodium = val;
  43. return this;
  44. }
  45.  
  46. public NutritionFacts build() {
  47. return new NutritionFacts(this);
  48. }
  49. }
  50.  
  51. private NutritionFacts(Builder builder) {
  52. servingSize = builder.servingSize;
  53. servings = builder.servings;
  54. calories = builder.calories;
  55. fat = builder.fat;
  56. sodium = builder.sodium;
  57. carbohydrate = builder.carbohydrate;
  58. }
  59.  
  60. @Override
  61. public String toString() {
  62. return "[" +
  63. "servingSize:" + servingSize +
  64. ",servings:" + servings +
  65. ",calories:" + calories +
  66. ",fat:" + fat +
  67. ",sodium:" + sodium +
  68. ",carbohydrate:" + carbohydrate +
  69. "]";
  70. }
  71.  
  72. public static void main(String[] args) {
  73. NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
  74. .calories(100).sodium(35).carbohydrate(27).build();
  75.  
  76. System.out.println(cocaCola);
  77. }
  78. }

构造Map

  1. package com.jt.mongo.demo.basic.util;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. /**
  7. * 构建拥有多个值的Map(简化map操作):<br/>
  8. * map = ParamBuilder.of().withParam().withParam().withParam().build();.
  9. *
  10. * @author weihainan.
  11. * @since 0.1 created on 2017/2/8.
  12. */
  13. public final class ParamBuilder {
  14.  
  15. private Map<String, Object> paramMap = new HashMap<>(6);
  16.  
  17. private ParamBuilder() {
  18. // empty
  19. }
  20.  
  21. /**
  22. * 获取ParamBuilder对象.
  23. */
  24. public static ParamBuilder of(){
  25. return new ParamBuilder();
  26. }
  27.  
  28. /**
  29. * 获取ParamBuilder对象并设置一对key-value.
  30. */
  31. public static ParamBuilder of(String paramName, Object paramValue) {
  32. return new ParamBuilder().withParam(paramName, paramValue);
  33. }
  34.  
  35. /**
  36. * 设置参数,可多次操作.
  37. */
  38. public ParamBuilder withParam(String paramName, Object paramValue) {
  39. paramMap.put(paramName, paramValue);
  40. return this;
  41. }
  42.  
  43. /**
  44. * 获取最终的map.
  45. */
  46. public Map<String, Object> build() {
  47. return paramMap;
  48. }
  49. }

链式编程:遇到多个构造器参数(Constructor Parameters)时要考虑用构建器(Builder)的更多相关文章

  1. 遇到多个构造器参数时要考虑用构建器 builder 模式 JavaBean 线程安全

    effective java p9 JavaBeans模式阻止了把类做成不可变的可能,这需要程序员付出额外的努力来确保它的线程安全.

  2. 从零开始学 Web 之 jQuery(七)事件冒泡,事件参数对象,链式编程原理

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  3. iOS开发技巧系列---使用链式编程和Block来实现UIAlertView

    UIAlertView是iOS开发过程中最常用的控件之一,是提醒用户做出选择最主要的工具.在iOS8及后来的系统中,苹果更推荐使用UIAlertController来代替UIAlertView.所以本 ...

  4. 由表单验证说起,关于在C#中尝试链式编程的实践

    在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的htt ...

  5. ASP.NET MVC学前篇之扩展方法、链式编程

    ASP.NET MVC学前篇之扩展方法.链式编程 前言 目的没有别的,就是介绍几点在ASP.NETMVC 用到C#语言特性,还有一些其他琐碎的知识点,强行的划分一个范围的话,只能说都跟MVC有关,有的 ...

  6. ios的链式编程笔记

    1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数  > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯 ...

  7. Objective-C 链式编程思想

    链式编程思想 链式编程是什么 链式编程就是将调用多个方法用点语法连接起来,让代码更加简洁和可读性更高刚开始接触链式编程是Masonry,用起来真的非常爽 1 make.left.right.top.e ...

  8. jQuery插件编写及链式编程模型

    jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...

  9. (一一八)利用block实现链式编程

    有些时候需要不断地调用方法,如果使用传统方案,需要拿到对象多次调用,例如有一个Ball对象,实现了up.down.left.right四个方法,分别控制球的运动方向,如果要实现球向右再向下,需要这么写 ...

随机推荐

  1. 为MAC配置终端环境iTerm2+Zsh+oh-my-zsh

    首先展示下我的终端吧. 这就是我们为什么要配置iTerm2+Zsh+oh-my-zsh环境的原因: 我们使用zsh解释器,当然等你使用 zsh时就会知道zsh与bash对比的强大之处了. 至于我们的g ...

  2. Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock

    在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...

  3. DBCC--常用跟踪标记

    使用DBCC TRACEON 和DBCC TRACEOFF来打开和关闭跟踪标记 使用DBCC TRACESTATUS来查看所有打开的跟踪标记 --260:打印关于扩展存储过程动态链接库的版本信息 -- ...

  4. Docker容器的原理与实践 (下)

    欢迎访问网易云社区,了解更多网易技术产品运营经验. Docker原理分析 Docker架构 镜像原理 镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容Docker以镜像和在镜 ...

  5. 一文看尽 Raft 一致性协议的关键点

    本文由  网易云 发布. 作者:孙建良 Raft 协议的发布,对分布式行业是一大福音,虽然在核心协议上基本都是师继 Paxos 祖师爷(Lamport) 的精髓,基于多数派的协议.但是 Raft 一致 ...

  6. s11 day104 数据库表结构与立即支付流程

    数据库表结构: 13张 1. 课程大类 2.课程子类 3.学位课程 4.老师表 5.奖学金 6.专题课 7.课程详情 8.课程大纲 9.常见问题 10.章节 11.课时 12.作业表 13.价格策略 ...

  7. [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 ...

  8. centos7 虚拟机中,网卡不启动的解决方式

    使用NAT模式的虚拟centos, 只显示两个网卡,无法连接外网, 输入systemctl start network后报错信息" Restarting network (via syste ...

  9. 配置国内的maven仓库

    MAVEN中央仓库 国内 配置Maven中央仓库路径的方法如下: 在Maven文件的conf目录中打开settings.xml文件 在文件中的servers节点和mirror节点中加入如下内容 华为云 ...

  10. Java Web相关技术(汇聚页)

    Java Web相关技术(汇聚页) 初学Java Web(2)——搭建Java Web开发环境