Builder模式适用于构造对象时,须要多个参数的状况。对于多个参数,用方法名也能很好的说明用途。
java
但为了构造对象,就必须先建立它的Builder构建器,在某些十分注重性能的状况下,就多是一个性能问题。ide
实现方式1:性能
public class Book { private final String author; //必须参数 private final String name; //必须参数 private final String ISBN; //必须参数 private final String language; //非必须参数 private final int weight; //非必须参数 private Book(Builder builder){ author = builder.author; name = builder.name; ISBN = builder.ISBN; language = builder.language; weight = builder.weight; } public static class Builder{ private final String author; private final String name; private final String ISBN; private String language; private int weight; public Builder(String author, String name, String iSBN) { this.author = author; this.name = name; ISBN = iSBN; } public Builder language(String language){ this.language = language; return this; } public Builder weight(int weight){ this.weight = weight; return this; } public Book build(){ return new Book(this); } } @Override public String toString() { return "Book [author=" + author + ", name=" + name + ", ISBN=" + ISBN + ", language=" + language + ", weight=" + weight + "]"; } }
使用方式:ui
Book book = new Book.Builder("author", "name", "ISBN") .language("language") .weight(2) .build();
实现方式2:this
public class Book { private final String author; //必须 private final String name; //必须 private final String ISBN; //必须 private final String language; //非必须 private final int weight; //非必须 private Book(Builder builder){ author = builder.author; name = builder.name; ISBN = builder.ISBN; language = builder.language; weight = builder.weight; } public static Builder builder(String author,String name,String ISBN){ return new Builder(author,name,ISBN); } private static class Builder{ private final String author; private final String name; private final String ISBN; private String language; private int weight; public Builder(String author, String name, String iSBN) { this.author = author; this.name = name; ISBN = iSBN; } public Builder language(String language){ this.language = language; return this; } public Builder weight(int weight){ this.weight = weight; return this; } public Book build(){ return new Book(this); } } @Override public String toString() { return "Book [author=" + author + ", name=" + name + ", ISBN=" + ISBN + ", language=" + language + ", weight=" + weight + "]"; } }
使用方式:spa
Book book = Book.builder("author", "name", "ISBN") .language("language") .weight(2) .build();