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のソースコードを見てください。
1、
2、
3、
次はAlertDialogのソースコードの一部です。
以上がこの文章のすべての内容です。ここの内容は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の開発者の皆さんの助けになりたいです。質問があれば、メッセージを残して交流してください。