Android のデザイン パターン – Builder

Builder

Builder パターンは、非常にクリーンで読みやすい方法でオブジェクトの作成を簡略化します。 多くのパラメーターを持ついくつかのモデル クラスがある場合、これは非常に便利です。 それらのいくつかをオプションまたは必須にすることができ、特定の順序を使用するようにユーザーに強制することはありません (コンストラクタのように)。 Builderパターンを使うことで、エレガントなメソッドの連鎖が生まれます。

new AlertDialog.Builder(this)
.setTitle("Design Patterns")
.setMessage("Builder is awesome")
.create();

どのようにして Builder クラスを作成するのですか。

Builder in practice

ユーザー用のモデル クラスがあると仮定します。 まず、オブジェクトを作成するためのメソッドを持つ User クラスの中に Builder クラスを作成する必要があります。 ビルダーメソッドはBuilderクラスを返すことが、メソッドを連結させる鍵になります。 例を見てください。

static class Builder {
private String firstName;
private String lastName;
private int age;
public Builder setFirstName(final String firstName) {
this.firstName = firstName;
return this;
}
public Builder setLastName(final String lastName) {
this.lastName = lastName;
return this;
}
public Builder setAge(final int age) {
this.age = age;
return this;
}
public User create() {
return new User(this);
}
}

すべてのパラメータに対してセッターがありますが、これらのメソッドは Builder 型を返すという違いがあります。

次に、モデルクラス User のすべてのパラメータを含むコンストラクタを作成する必要があります :

public class User {
private String firstName;
private String lastName;
private int age;
private User(final Builder builder) {
firstName = builder.firstName;
lastName = builder.lastName;
age = builder.age;
}
}

ここで重要なことは、User コンストラクタは private なので、他のクラスからアクセスすることができず、新しいオブジェクトを作成するには Builder を使用しなければならないことです。

もちろん、create() メソッドを修正して例外をスローすることにより、一部のパラメータを必須にすることもできます (現時点ではすべてオプションです)。 このようにして、User.Builder() クラスを作成しました。

Builder – プロヒント

ブログ投稿全体を読み通すのに十分我慢したなら、Builder パターンに関して 1 つのヒントがあります: IntelliJ を使用して Builder クラス全体を生成することができます!

やるべきことは、クラス内のコンストラクターにキャレットを置いて、コンテキスト メニューから Refactor -> Replace Constructor with Builder を選択することのみです。 すべてのメソッドを含むビルダー クラスが自動生成され、使用できるようになります。

詳細については、こちらを参照してください。 IntelliJ: コンストラクターをビルダーに置き換える

Conclusion

Builder パターンは、モデル クラスだけでなく、3 つか 4 つのパラメーター以上を持つすべてのオブジェクトに対して素晴らしいアプローチです。 少しの追加作業で、コードの読みやすさを向上させることができます。 デザイン パターンはベスト プラクティスとして認識されているので、それらのいくつかを知っていれば大きな利点となり、Builder はそれを始めるには良いものです。