最近在继续iPhone业务的同时还需要重新拾起Android。在有些生疏的情况下,决定从Android源码中感悟一些Android的风格和方式。在学习源码的过程中也发现了一些通用的模式,希望通过一个系列的文章总结和分享下。
    建造者模式将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。Android中AlertDialog是一个多面手,可以有着不同的样式和呈现,这样通过Builder就可以有效实现构建和表示的分离。其实现的类图如下:Android和设计模式:建造者模式_第1张图片主要代码如下:public static class Builder {
    private final AlertController.AlertParams P;
    private int mTheme;
    ......    public Builder(Context context, int theme) {
        P = new AlertController.AlertParams(context);
        mTheme = theme;
    }
    public Builder setTitle(int titleId) {
        P.mTitle = P.mContext.getText(titleId);
        return this;
    }    public Builder setMessage(int messageId) {
        P.mMessage = P.mContext.getText(messageId);
        return this;
    }
    public Builder setIcon(int iconId) {
        P.mIconId = iconId;
        return this;
    }    public Builder setPositiveButton(int textId, final OnClickListener listener) {
        P.mPositiveButtonText = P.mContext.getText(textId);
        P.mPositiveButtonListener = listener;
        return this;
    }
    public Builder setNegativeButton(int textId, final OnClickListener listener) {
        P.mNegativeButtonText = P.mContext.getText(textId);
        P.mNegativeButtonListener = listener;
        return this;
    }
    ......
    public AlertDialog create() {
        final AlertDialog dialog = new AlertDialog(P.mContext, mTheme);
        P.apply(dialog.mAlert);
        dialog.setCancelable(P.mCancelable);
        dialog.setOnCancelListener(P.mOnCancelListener);
        if (P.mOnKeyListener != null) {
            dialog.setOnKeyListener(P.mOnKeyListener);
        }
        return dialog;
    }    public AlertDialog show() {
        AlertDialog dialog = create();
        dialog.show();
        return dialog;
    }
}
    其中在进行各种属性设定的时候都返回this,这样就可以实现“流畅的接口”,创建AlertDialog的时候就可以使用如下代码:
AlertDialog langSelectionDialog = new AlertDialog.Builder(context).setTitle("please select a language").setSingleChoiceItems(
    new String[] {"en", "tr"},  0, null).setPositiveButton("ok", new OnClickListener() {    
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i("Tag","ok "+ which);
                    }
                }).setNegativeButton("cancle", new OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Log.i("Tag","cancle");
                    }
                }).show();

更多相关文章

  1. Android 闹钟源码
  2. 编译cubieboard android 源码过程详解之(六):pack
  3. Android应用程序安装过程源代码分析(3)
  4. Android中使用Gallery_tabhost来实现标签效果图源码
  5. Android中启动动画源码讲解
  6. Android 源码 修改系统默认横屏
  7. 45个android实例源码
  8. Android应用程序安装过程源代码分析(4)
  9. 全志A64 Android7.1屏蔽使用按键进入安全模式的方法

随机推荐

  1. Android术语小全,推荐一下(改日在翻译).
  2. Android简易实战教程--第三十九话《简单
  3. Android开启硬件加速
  4. 获取Android屏幕尺寸、控件尺寸、状态栏/
  5. Android(安卓)Studio3.0自定义apk输出路
  6. android开发 使用uses-sdk 导致布局不一
  7. Android(安卓)UI学习 - Tab的学习和使用
  8. 让Android(安卓)adb运行在ARM平台上
  9. SQL Server 2000“设备激活错误”的解决
  10. SQLServer按顺序执行多个脚本的方法(sqlcm