Android设计模式之建造者模式——AlertDialog

来源:互联网 发布:bilibili mac版下载 编辑:程序博客网 时间:2024/06/07 03:35

建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式(引自百度百科)。

在建造者设计模式中,有以下几个角色:

1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
面向接口编程方便后期扩展,使用灵活,降低耦合等,那么看了这些概念后不妨看下Android中涉及到该模式的案例。
例如:AlertDialog(Android确认对话框),熟悉该对话框的应该都知道构建的步骤清晰明朗,流式的构造方式则体现的更better些。这也预兆着为什么响应式编程会越来越流行(RxJava)。
看一下AlertDialog的构造代码:
new AlertDialog.Builder(this)                    .setTitle("提示框标题")                    .setMessage("提示信息")                    .setCancelable(false)                    .setPositiveButton("确定",(dialog, which)->{                        AlarmDialogActivity.this.finish();                    })                    .setNegativeButton("取消",(dialog, which)->{                        AlarmDialogActivity.this.finish();                    })                    .show();

AlertDialog采用Builder进行构造参数的配置,最后通过show()方法返回一个已配置的AlertDialog实例
注:上述构造代码中采用了Lambda(兰布达)表达式:(dialog, which) -> {} 
   Build是AlertDialog的内部类,Build中有所有参数配置的方法,例如:
   public Builder setTitle(CharSequence title) {            P.mTitle = title;            return this;        }
这些方法的操作是将配置参数用成员P变量保存起来。Build中队P声明如下:
private final AlertController.AlertParams P

下面看一下show()方法:
        public AlertDialog create() {            final AlertDialog dialog = new AlertDialog(P.mContext, mTheme, 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;        }        /**         * Creates a {@link AlertDialog} with the arguments supplied to this builder and         * {@link Dialog#show()}'s the dialog.         */        public AlertDialog show() {            AlertDialog dialog = create();            dialog.show();            return dialog;        }

由上可见,show方法是返回一个AlertDialog实例,那之前配置的参数呢?细心点你会发现这行代码:
AlertDialog dialog = create();
show方法调用了create方法,而create方法进行了参数的配置并返回了AlertDialog实例。
这样一个简单的构造者模式就完成了。



0 0
原创粉丝点击