建造者模式与Android AlertDialog
作用
? 建造者模式是一种创建型模式,用于构建较为复杂的对象,当类的构造参数有多个且有的参数为可选参数时可以使用。用户只需指定复杂对象的参数就可以构建,而不需要知道其内部的构造细节
UML图
- Director:指挥者,聚合构造者,指挥构造者进行类的构造
- Builder/ConcreteBuilder:构造者,组合产品类,具体构造产品
- Product:产品类
AlertDialog中的构造者模式
AlertDialog为产品类,其内部静态类为Builder,Builder是作为指挥者和构建者来构建产品类,并使用AlertController.AlertParams类来辅助传递构造时的参数
- AlertDialog为产品类,包含很多产品零件的set方法
public class AlertDialog extends AppCompatDialog implements DialogInterface {
@Override
public void setTitle(CharSequence title) {
super.setTitle(title);
mAlert.setTitle(title);
}
public void setCustomTitle(View customTitleView) {
mAlert.setCustomTitle(customTitleView);
}
public void setMessage(CharSequence message) {
mAlert.setMessage(message);
}
}
- Builder作为静态内部类存在于AlertDialog中
public static class Builder {
private final AlertController.AlertParams P;
public Builder setCustomTitle(@Nullable View customTitleView) {
P.mCustomTitleView = customTitleView;
return this;
}
...
@NonNull
public AlertDialog create() {
final AlertDialog dialog = new AlertDialog(P.mContext, mTheme);
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;
}
}
|