学习记录--遇到多个构造参数时考虑用构建器

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 sodium = 0;

        private int carbohydrate = 0;

        public Builder(int servingSize, int servings) {
            super();
            this.servingSize = servingSize;
            this.servings = servings;
        }

        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;
        }

        public NutritionFacts build() {
            return new NutritionFacts(this);
        }
    }

    private NutritionFacts(Builder builder) {
        servingSize = builder.servingSize;
        servings = builder.servings;
        calories = builder.calories;
        fat = builder.fat;
        carbohydrate = builder.carbohydrate;
        sodium = builder.sodium;
    }

    public static void main(String[] args) {
        NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8).calories(23).sodium(5).build();
    }
}

  

时间: 2024-07-31 00:00:30

学习记录--遇到多个构造参数时考虑用构建器的相关文章

第二条:遇到多个构造器参数时考虑使用构建器

遇到需要多个参数(参数可分为必需参数和非必需参数)才能实例化一个类的对象时,一般有三种方法: 1.重叠构造器 重叠构造器的方式可行,但是当有许多参数的时候,客户端的代码会很难编写,而且很容器出错. 2.JavaBean式的类 通过setter方法来为实例对象设置Field的值. 3.使用构建器

分页技术框架(Pager-taglib)学习三(pager-taglib中传递参数时中文乱码问题)

一.问题描述 问题: 使用<pg:param name="key" />标签传递中文参数时,会有乱码. 原因: 因为它默认是用gb2312来对添加的参数进行编码,如果你的过滤器.jsp页面都是采用的gb2312就没有什么问题,如果你采用的是utf-8来编码,那么中文参数传递过程中就会出现乱码导致无法解析.   二.问题解决方法 网上有很多解决办法,重新修改编译源代码是一种方法: 在com\jsptags\navigation\pager下面的PagerTag的addPara

Item2: 遇到多个构造器形参时考虑使用构建器

Consider a builder when faced with many constructor parameters 引言 遇到多个构造器时要考虑用构建器(builder) 重叠构造器(telescoping constructor) // Telescoping constructor pattern - does not scale well! - Pages 11-12 /** * 营养成分表 */ public class NutritionFacts { private fin

My.Ioc 代码示例——使用默认构造参数和覆盖参数

在 Ioc 世界中,有些框架(例如 Autofac/NInject/Unity)支持传递默认参数,有些框架(例如 SimpleInjector/LightInjector 等)则不支持.作为 My.Ioc 来说,我们支持默认参数. 当我们在 My.Ioc 中注册对象时,有些对象类型 (System.Type) 要求我们必须提供默认参数,而有些则不是必要的.在 My.Ioc 中,默认参数有两个作用:1. 容器根据默认参数来选择用于构建对象的构造函数.而一旦选定构造函数之后,今后容器便会一直使用该构

关于在学习python爬虫时的学习记录

最近学习python3爬虫,看的是这位博主的博客,不得不说,是真的厉害,通俗易懂^?_?^ 我要学习的还有很多-从基本的python知识,我就被难倒了- 哎,记录下我的盲点- 花了近一个钟头测试出来的结果. 在爬取相关的html时,text ≠ text[0] 后者是正确的.我一直以为不加的效果也是一样的结果,在我理解看来就是从头开始的,即从0到尾的所有相关的内容,实际上我的理解与相关的python基础不谋而和,可能是爬虫就需要如此的?我就默认好了- 在python中的方法后面的()是不可省去的

【Java学习笔记之二十七】Java8中传多个参数时的方法

java中传参数时,在类型后面跟"..."的使用: public static void main(String[] args){       testStringArgs();//无参数传入       testStringArgs("one");//一个参数传入       testStringArgs("one","two","three");//3个String参数传入       testStri

《灰帽Python-黑客和逆向工程师的Python编程》学习记录

ctypes是Python语言的一个外部库,提供和C语言兼容的数据类型,可以很方便的调用C DLL中的函数. 操作环境:CentOS6.5 Python版本:2.66 ctypes是强大的,强大到本书以后介绍的几乎所有库都要基于此.使用它我们就能够调用动态链接库中函数,同时创建各种复杂的C数据类型和底层操作函数.毫无疑问,ctypes就是本书的基础. 第一章 搭建开发环境 1.3.2 使用动态链接库 from ctypes import * libc = CDLL("libc.so.6"

Python学习记录day3

Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个无序且不重复,可嵌套的元素集合 class set(object):     """     set() -> new empty set object     set(iterable) -> new set object     Build an unordered collection of unique elements.     

MyBatis结果映射与MyBatis缓存初探学习记录

MyBatis高级结果映射(一对一.一对多.多对多的映射),延迟加载,查询缓存(一级缓存),二级缓存的学习记录: 1.学习中所使用到的例子,数据库基础分析 2.高级结果映射 3.延迟加载 4.一级缓存 5.二级缓存 1.学习中所使用到的例子,数据库基础分析 2.高级结果映射 resultType与resultMap: resultType来进行结果映射,数据库中查询几条记录,那么在resultType就会映射成几条记录:resultType映射是一个平铺式的映射: resultMap比较繁琐一些