あけましておめでとうございます。
今年はブログ投稿をたくさんしていきたいと思っている、るゔです。
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パターンもいくつか
あるようなので、ぜひ調べて使いやすいものを使ってみてください!