最近看一些android的代码,发现他的AlertDialog是需要用类似下面的代码来创建的:
new AlertDialog.Builder(this) .xxxx
进入到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对象,造成约束失败的情况。
本文探讨了Android中AlertDialog的实现方式,使用Builder模式构建复杂对象,确保了对象创建过程中的灵活性和约束性。通过分析源码,揭示了AlertDialog构造函数被声明为protected的原因,即避免外部不当创建对象导致约束失效。
989

被折叠的 条评论
为什么被折叠?



