Builder pattern

Effective Java second editionを読み始めたのですが、何だか良いですね。これは。

で、Java素人の私は色々目から鱗なのですが、最初の方に載っていたBuilderパターンが格好良かったので、思い出しながら書き直してみました。

class Foo {
    private final int age;
    private final String name;
    private final String phone;
    private final String email;

    static class Builder {
        private int age;
        private String name;
        private String phone;
        private String email;

        public Builder age(int age) { this.age = age; return this; }
        public Builder name(String name) { this.name = name; return this; }
        public Builder phone(String phone) { this.phone = phone; return this; }
        public Builder email(String email) { this.email = email; return this; }
        public Foo build() { return new Foo(this); }
    }

    private Foo(Builder builder) {
        this.age = builder.age;
        this.name = builder.name;
        this.phone = builder.phone;
        this.email = builder.email;
    }
    public String toString() {
        return "age=" + age + " name=" + name +
               " phone=" + phone + " email=" + email;
    }
}

public class Bar {
    public static void main(String argv[]) {
        Foo foo = new Foo.Builder().age(56).name("Dark Programmer").
                      phone("090-1234-5678").email("dark@programmer.com").
                      build();
        System.out.println(foo);
    }
}
komamitsu@onion:~/lab/java/EJ$ java Bar
age=56 name=Dark Programmer phone=090-1234-5678 email=dark@programmer.com

Effective Javaと平行して、昔適当に買ってたデザパタ本も読んでいるのだけど、こんなに格好良くないんだよなぁ。味も素っ気もないというか。

一人一人が、それぞれのBuilder patternを心の中に持っている、ということなのかしら。