线程安全的多参构建器实现

适用情况:

1:参数多

2:需要带参构造器多(避免冗余)

3:多线程并发情况

/**
 * 线程安全的多参构建器实现
 *
 * @author 祥少
 *
 */
public class Test {
    private int a;
    private int b;
    private int c;

@Override
    public String toString() {
        return "Test [a=" + a + ", b=" + b + ", c=" + c + "]";
    }

public Test(Build bd) {
        a = bd.a;
        b = bd.b;
        c = bd.c;
    }

public static class Build {
        private int a;
        private int b = 0;
        private int c = 0;

public Build(int a) {
            this.a = a;
        }

public Build setB(int b) {
            this.b = b;
            return this;
        }

public Build setC(int c) {
            this.c = c;
            return this;
        }

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

public static void main(String[] args) {
        Test test = new Test.Build(100).setB(200).build();
        System.out.println(test.toString());
    }
}

时间: 2024-10-09 21:18:19

线程安全的多参构建器实现的相关文章

考虑用构建器

遇到多个构造器参数时要考虑用构建器 java effective java 创建和销毁对象 2.1 参数的限制 2.2 重叠构造器 2.3 JavaBeans模式 2.3.1 创建JavaBeans模式 2.3.2 JavaBeans模式的劣势 2.4 构建器 1. 构建器是什么? 2. 为什么使用构建器? 3 总结 1. 构建器是什么? 构建器也是一种获得类对象的方法,在前面我们介绍了通过 构造器 与 静态工厂方法 两种方式来获得类的对象. 这里我们写一个 Person 类,并为这个类加上构建

Java构建器模式

当创建对象需要传入多个参数的时候我们通常会根据参数的数量写不同的构造器,具体如下 public A(int a){} public A(int a, int b){} public A(int a, int b, int c){} 根据不同的参数调用不同的构造器,但是当参数多了的时候,这种方式不够灵活,所以会实现动态传参的方法 public A(){} public void seta(int a){} public void setb(int b){} public void setc(int

【读书笔记 - Effective Java】02. 遇到多个构造器参数时要考虑用构建器

类有多个可选参数的解决方案:1. 重叠构造器模式可行,但是当有许多参数的时候,客户端代码会很难编写,并且仍然较难以阅读.2. JavaBeans模式,调用一个无参构造器来创造对象,然后调用setter方法来设置每个必要的参数,以及每个相关的可选参数. 缺点:构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态.阻止了把类做成不可变的可能,需要程序员确保线程安全.3. Builder模式,模拟了具名的可选参数. 模式 优 劣 重叠构造器 写法最简单 多参数时候难读.难写.难

多个构造器参数使用构建器

标题一眼看过去可能不是很明白要讲什么,先来看看下面一段代码. 1 package example; 2 3 /** 4 * 重叠构造器 5 * @author yulinfeng 6 * Feb 13, 2017 7 */ 8 public class Student1 { 9 private String name; 10 private int age; 11 private String sex; 12 13 public Student1(String name) { 14 this(n

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

Java 构建器

假如我们的一个实体类有很多的属性值,但是这些属性值又是可选的.如果我们遇到这样的是类,如何设计出方便的实体类呢? 通常解决办法一: 重叠构造器 public class User { private String id; // id(必填) private String name; // 用户名(必填) private String email; // 邮箱(可选) private int age; // 年龄(可选) private String phoneNumber; // 电话(可选)

Java 《Effective Java 中文版 第2版》学习笔记 遇到多个构造器时要考虑用构建器

静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数. 当一个类中有若干个必选属性和多个可选属性时,采用重叠构造器模式.JavaBeans模式或者Builder模式,但各有优劣. 当有很多参数的时候,重叠构造器模式下客户端代码会很难编写,并且仍然较难以阅读. JavaBeans模式调用一个无参构造器来创建对象,然后调用setter方法来设置每个必要的参数,以及每个相关的可选参数.因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态.与此相关的另一点不

Java设计模式:Builder(构建器)模式

基本概念 Builder模式是一步一步创建一个复杂对象的创建型模式.该模式将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来. 应用场景 对象创建过程比较复杂,或对创建顺序或组合有依赖(经典Builder模式,可参阅GOF<设计模式>). 创建对象时所需参数较多,且包含较多可选参数(变种Builder模式,可参阅<Effective Java>构建器小节). 示例代码 本节侧重变种Builder模式,示例代码如下: public class RobustPerso

java利用构建器来创建实例而不是构造器

java利用构建器来创建实例而不是构造器 1.对于类而言,为了让客户端获取他本身的一个实例, 2.最传统的方法就是提供一个公有的构造器. 一个类中 重载多个构造器 客户面对多个构造器这种API永远也记不住该用哪个构造器, 并且每次调用构造器必然会创建新的对象, 如果程序需要重复使用对象,构造器无法避免创建不必要的对象. 静态工厂方法与构造器不同的 第一大优势为:他们有名称 第二大优势为:不必每一次调用他们的时候创建一个新对象 第三大优势为:他们可以返回原返回类型的任何子类型的对象 第四大优势为: