effective心得(2) 构造器中大量可选参数对比
2016-09-13 18:05
204 查看
静态工厂和构造器有个共同的局限性:它们都不能很好的扩展到大量的可选参数。这就是builder模式
比如java中一个类拥有多个标签的时候,使用构造器编写的时候,代码如下:
这个构造器调用通常需要许多你不需要的设置的参数,但还是不得不为它们传递值,一句话:重叠构造器模式可行,但是当有许多参数时,客户端代码会很难编写,并且仍然
难以阅读。
遗憾的是,javaBeans模式自身有着很严重的缺点。因为构造过程中被分到几个调用中,在构造过程中javabean可能处于不一致的状态。
幸运的是,还有第3种替代方法,既能保证重叠构造器模式那样的安全性,也能保证像javaBean模式那么好的可读性,这就是builder模式。
代码如下说明:
比如java中一个类拥有多个标签的时候,使用构造器编写的时候,代码如下:
这个构造器调用通常需要许多你不需要的设置的参数,但还是不得不为它们传递值,一句话:重叠构造器模式可行,但是当有许多参数时,客户端代码会很难编写,并且仍然
难以阅读。
遗憾的是,javaBeans模式自身有着很严重的缺点。因为构造过程中被分到几个调用中,在构造过程中javabean可能处于不一致的状态。
幸运的是,还有第3种替代方法,既能保证重叠构造器模式那样的安全性,也能保证像javaBean模式那么好的可读性,这就是builder模式。
代码如下说明:
package com.mc.bsfram.others.entity; public class Person { private String name; private String address; private int age; private double salarry; private Person(Builder builder){ this.age=builder.age; this.address=builder.address; this.age=builder.age; this.salarry=builder.salarry; } //static的Builder类 public static class Builder{ //成员变量应该会被赋予初始值 private String name; private String address; private int age; private double salarry; public Builder(String name){ this.name=name;
return this; } public Builder address(String address){ this.address=address; return this; } public Builder age(int age){ this.age=age; return this; } public Builder salarry(double salarry){ this.salarry=salarry; return this; } public Person build(){ return new Person(this); } } }
相关文章推荐
- 遇到构造器中有多个可选参数时要考虑用构建器
- Effective-Java学习笔记 遇到多个构造器参数时要考虑用构建器
- Effective Java 第二条:遇到多个构造器参数时要考虑用构建器
- Effective Java Item2:当构造方法的参数(尤其是可选参数)比较多时使用Builder模式
- effective java--遇到多个构造器参数最好使用Builder模式
- Effective Java 2 -- 遇到多个构造器参数的时候考虑构建器
- IMAQ Flatten Image to String VI的参数设置对比
- extends 构造器演示,基类带参数与不带参数区别
- JMeter性能测试基础 (3) - 使用参数文件做搜索引擎性能对比
- TQ210coreB与TQ210coreD核心板参数对比
- 遇到多个构造器参数时要考虑用构造器
- Effective Java 第二条:遇到多个构造器参数时要考虑用构建器
- [置顶] effective java笔记(一) —— 构造器实现之builder模式
- Effective Java慎用可变参数
- 使用Builder模式构建可扩展的多个参数构造器
- x264 参数测试--效率与质量对比
- QueryString参数传递和Session参数传递的对比
- 多个构造参数考虑使用Builder构造器模式
- Effective C# 学习笔记(十) 用可选参数尽量减少方法重载
- 当遇到多个构造器参数时可考虑用构建器