链式编程:遇到多个构造器参数(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四个方法,分别控制球的运动方向,如果要实现球向右再向下,需要这么写 ... 
随机推荐
- ORACLE EBS xml publisher 报表输出字符字段前部"0"被EXCEL自动去掉问题
			http://www.cnblogs.com/lzsu1989/archive/2012/10/17/2728528.html Oracle EBS 提供多种报表的开发和输出形式,由于MS Ex ... 
- 在centos7升级jenkins
			找到jenkins的位置 使用下面的命令 ps -aux | grep jenkins enkins 5954 7.9 22.5 2695800 421088 ? Ssl 20:5 ... 
- LinkedBlockingQueue源码解析(2)
			此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3.3.public void put(E e) throws InterruptedException 原 ... 
- C#通过rdp账密直接打开远程桌面
			思路是首先新建一个vbs脚本,再创建一个bat脚本,再创建rdp文件,运行顺序是vbs->bat->rdp.rdp文件里面包含远程电脑的账密和其它信息,这样就可以不用再输入账密,而在程序里 ... 
- 【Selenium专题】元素定位之一简单定位
			UI自动化工具千变万化.架构千变万化,但都逃离不开的关键一步就是元素定位.下面以Selenium为例介绍常见的几个元素定位方法 ID -元素id属性 WebElement El = driver.fi ... 
- 201621123018《Java程序设计》第3周学习报告
			Week03-面向对象入门 1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系 ... 
- C++ STL的容器类型
			1.顺序容器 2.关联容器 3.vector的使用 vector<数据类型> a; a.push_back(10) -------->把数据从末末尾段插入vector里面 a.po ... 
- clang 编译 OC
			clang -fobjc-arc -framework Foundation helloworld.m -o helloworld.out OVERVIEW: clang LLVM compiler ... 
- 系统可能不会保存你所做的修改    onbeforeunload
			网上找了好多实现这个的方法,说的还是不明白.害得我(我自己的原因)以为是需要在服务器环境下才能跑通 window.onbeforeunload; 后来猜想是不是函数返回值发生变化就会触发. <! ... 
- docker镜像基本操作一
			获取镜像 首先说明一下如何从Docker hub中获取高质量的镜像,从Docker镜像库获取镜像的命令是docker pull .其命令格式为: docker pull [选项] [Docker Re ... 
