あけましておめでとうございます。

今年はブログ投稿をたくさんしていきたいと思っている、るゔです。

 

Builderパターンってなんだろうって思い調べて使ってみました。

Builderパターンとそうじゃない例を上げてみます。

 

まずはBuilderパターンではない方

public class Human {
    private String name;
    private Integer age;
    private Integer sex;

    public Human(String name, Integer age, Integer sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }
}

 

使う側は以下のようになると思います。

 

Human human = new Human("るゔ", 18, 0);

このようなコンストラクタを使うパターンだと記述中パラメータの数を数えたり めんどうくさいですよね。 Builderパターンだとそれがなくなります。 以下がBuilderパターンの例です。

public class Human {
    private String name;
    private Integer age;
    private Integer sex;

    public Human(String name, Integer age, Integer sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public static class Builder {
        private String name;
        private Integer age;
        private Integer sex;

        public Builder() {
        }

        public Builder name(String name) {
            this.name = name;
            return this;
        }

        public Builder age(Integer age) {
            this.age = age;
            return this;
        }

        public Builder sex(Integer sex) {
            this.sex = sex;
            return this;
        }

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

    private Human(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.sex = builder.sex;
    }
}

使う側は以下のようになります。

Human human = new Human.Builder()
                .name("るゔ")
                .age(18)
                .sex(0)
                .build();

なにを渡したのかわかりますし、コンストラクタを何パターンも書いて

いらないパラメータを渡さないようにするなんて必要もなくなりますよね。

 

自分はBuilderパターンを書くものめんどくさかったのでPythonの勉強がてら

ある程度は自動で生成してコピペしてみたり←

以上です!自分が紹介した方法以外のBuilderパターンもいくつか

あるようなので、ぜひ調べて使いやすいものを使ってみてください!