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 はそれを始めるには良いものです。