为什么android中的AlertDialog要用一个内部的static class Builder来创建呢?

最近看一些android的代码,发现他的AlertDialog是需要用类似下面的代码来创建的:

进入到AlertDialog的源代码,可以看到AlertDialog是继承于Dialog,并且他的构造函数都是声明成protected的。而Builder是一个内部的public static class. Builder的大部分方法是在设置一个AlertController.AlertParams 的object.只有在调用Builder.create或者show的时候(其实show也是先调用了create),才会真正的new一个AlertDialog的对象,并且把AlertParams的某些参数设置给这个AlertDialog对象。

 

但是我始终没想明白这样做会带来什么特别的效果或者说好处。只是为了结构上看起来稍微清晰一点?还是有深层次的含义呢?

 

结论:这是一个builder模式构建复杂对象的应用。在Builder.create中,或者在params的设置中,就能够实现对AlertDialog本身的约束规则。AlertDialog声明protected的构造函数就防止了外部代码不通过build而直接去new对象,造成约束失败的情况。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅帅兔子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值