采用Build模式构建自定义Dialog

本文介绍了Build模式的概念,并通过实例展示了如何将一个复杂的Dialog构建过程改造成使用Build模式,以实现链式编程。文章首先展示了一个没有使用Build模式的Dialog写法,然后逐步改进,简化参数传递,提高代码可读性和可维护性。最终,通过示例代码展示了Build模式在自定义Dialog中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说Build的概念,我看到网上有很多关于这个模式的解释说明,我比较认同的是下面的这种理解:
所谓Build模式就是:一步一步将一个复杂对象创建出来,允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。

我们最深的体会就是链式编程的运用,这里面基本上都是创建了一个内部静态Build. Android中尤为常见,比如说AlertDialog. 我这里就拿自己做的一个Dialog仿照AlertDialog,运用Build模式来创建,可能封装得有些不完整,但是我一开始的目的就是希望能用到链式编程,所以就算不完整,我还是拿来作为案例讲解。

1.效果图:

这里写图片描述

2. 没有运用Build模式的写法:

可以看到这个Dialog中,需要传递的参数非常多,总计有8个,按照普通写法,可能在new Dialog中需要一次性传递8个参数,不要笑话我,我开始赶进度的时候确实是这么做的。

 public EffectDialog(Context context, int themeResId,String effect,String visit,String praise,
                        String comment,String share,String collection,String reward,String speed) {
        super(context, themeResId);
        mEffect = effect;
        mVisit = visit;
        mPraise = praise;
        mComment = comment;
        mShare = share;
        mCollection = collection;
        mReward = reward;
        mSpeed = speed;
    }

然后在调用的地方,使劲的传参数,还时不时看有没有传错位。太痛苦了。
然后痛定思痛,开始改造。

3. 改造成Build模式

先看源码AlertDialog, 有个AlertController

private AlertController mAlert;

还有个内部静态类Builder,我这里只摘抄几个方法:


public static class Builder {

    private final AlertController.AlertParams P;


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

    public Builder setTitle(CharSequence title) {
            P.mTitle = title;
            return this;
        }
..........

还有个就是要看AlertDialog的OnCreate方法:

 @Override
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值