最近看一些android的代碼,發現他的AlertDialog是須要用相似下面的代碼來建立的:java
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對象。android
可是我始終沒想明白這樣作會帶來什麼特別的效果或者說好處。只是爲告終構上看起來稍微清晰一點?仍是有深層次的含義呢?函數
結論:這是一個builder模式構建複雜對象的應用。在Builder.create中,或者在params的設置中,就可以實現對AlertDialog自己的約束規則。AlertDialog聲明protected的構造函數就防止了外部代碼不經過build而直接去new對象,形成約束失敗的狀況。ui