Androidの中の建築者のモードを深く理解します。


前言
Androidの開発の過程で、多くのAndroidソースコードにデザインモードが適用されていることを発見しました。よく使われているのはアダプターモード(各種adapper)、建築者モード(Alert Dialogの構築)などです。ほとんどのデザインモデルについて知っていますが、デザインモードを適用するという点では、多くの人がこの点で足りないと感じています。だから、この文章は私達と一緒にAndroidの中の建築者パターンを深く理解します。
ビルダーモードもジェネレータモードと呼ばれています。その定義は以下の通りです。
separate the construct of a complex object from its representation so that the same construct process can create different representations.一つの複雑なオブジェクトの構築をその表示から分離すれば、同じ構築過程が異なる表現を作ることができます。
一つの製品(対象)を表示(展示)することと構築(作成)過程を分離することです。このように製品の構築プロセスは同じですが、違った製品表示ができます。
アプリケーションシーン
ここではAndroidでよく見られる例を挙げます。
AndroidのAlertDialogダイアログの構築過程は建築者モードの典型的な応用である。

Buiderのソースコードを見てください。

 public static class Builder {
  private final AlertController.AlertParams P;

  public Builder(Context context) {
    this(context, resolveDialogTheme(context, 0));
  }


  public Builder(Context context, int themeResId) {
    P = new AlertController.AlertParams(new ContextThemeWrapper(
        context, resolveDialogTheme(context, themeResId)));
  }

  //  set    
  setTitle()
  ...
  ...
  ...

  /**
   * Creates an {@link AlertDialog} with the arguments supplied to this
   * builder.
   * <p>
   * Calling this method does not display the dialog. If no additional
   * processing is needed, {@link #show()} may be called instead to both
   * create and display the dialog.
   */
  public AlertDialog create() {
    // Context has already been wrapped with the appropriate theme.
    final AlertDialog dialog = new AlertDialog(P.mContext, 0, false);
    P.apply(dialog.mAlert);
    dialog.setCancelable(P.mCancelable);
    if (P.mCancelable) {
      dialog.setCanceledOnTouchOutside(true);
    }
    dialog.setOnCancelListener(P.mOnCancelListener);
    dialog.setOnDismissListener(P.mOnDismissListener);
    if (P.mOnKeyListener != null) {
      dialog.setOnKeyListener(P.mOnKeyListener);
    }
    return dialog;
  }


  //   show   builder   ,     create() show()              
  public AlertDialog show() {
    final AlertDialog dialog = create();
    dialog.show();
    return dialog;
  }
}
ソースの分析は、内部Builderを参照してください。このダイアログを構築するために使用されます。
    1、builderを作成すると、このAlertController.AlertParams P;オブジェクトPをnewを作成します。
    2、bilderに対して各種パラメータを設定する場合、これらのパラメータはいずれもオブジェクトPに存在する。
    3、builderパラメータの設定が完了したら、createメソッドを呼び出します。

final AlertDialog dialog = new AlertDialog(P.mContext, 0, false);
P.apply(dialog.mAlert); // mAlert      
この方法では、まず外部クラスAlertDialogの構成方法を呼び出し、newは外部クラスのオブジェクトを示し、次いでp.apply()は、Pというオブジェクトを内部クラスの属性としてAlertControllerのオブジェクトmAlertに割り当てます。これで一回の構築が完了しました。
次はAlertDialogのソースコードの一部です。

public class AlertDialog extends Dialog implements DialogInterface {
  //         builder        
  private AlertController mAlert;

  //                 builder   
  protected AlertDialog(Context context) {
    this(context, 0);
  }

  protected AlertDialog(Context context, boolean cancelable,   OnCancelListener cancelListener) {
    this(context, 0);
    setCancelable(cancelable);
    setOnCancelListener(cancelListener);
  }


  protected AlertDialog(Context context, @StyleRes int themeResId) {
    this(context, themeResId, true);
  }

  AlertDialog(Context context, @StyleRes int themeResId, boolean createContextThemeWrapper) {
    super(context, createContextThemeWrapper ? resolveDialogTheme(context, themeResId) : 0,
      createContextThemeWrapper);

    mWindow.alwaysReadCloseOnTouchAttr();
    mAlert = new AlertController(getContext(), this, getWindow());
    }
}
締め括りをつける
以上がこの文章のすべての内容です。ここの内容はAndroidの開発者の皆さんの助けになりたいです。質問があれば、メッセージを残して交流してください。