标签:
背景
很多时候,我们可以看到一个对象的构造函数有很多参数。众多的参数里面,很多可以拥有缺省值,意味着在构造该对象是并不需要一一指定每一个参数。
在语言层面,C++支持默认参数,但是需要把默认参数放在最右边,并且默认参数和非默认参数不能混杂。而Java本身不支持默认参数。你或许可以通过重载来提供一个少量参数的接口,但还是很不方便。
另一方面,很多时候我们只需要众多参数中的一个子集。我们知道一个集合的子集个数为2^n,这是一个爆炸组合。实际上我们不可能提供那么多的接口,让使用者记住也是不可能的事情。
场景
对象的构建需要较多的参数,但每个使用者希望有选择参数的自由。
实例
Android的AlertDialog分为多个种类,可以是一个简单的信息提示框,可以是一个确认提醒框,可以是一个输入框,可以是一个选择框,等等。它本身还支持用户自定义视图。我们可以看到,要提供一个完整的AlertDialog接口,需要提供的接口包括:
设置Icon
设置标题
设置提示信息内容
设置按钮,Positive Button、Negative Button
设置按钮事件处理函数
设置选择项列表
设置选择事件处理函数
自定义View
等等
很多用户并不需要完整的接口。比如弹出一个提示信息,只需要提示信息,Icon和标题都是可选的。
new AlertDialog.Builder(self) .setTitle("Info") .setMessage("Request submitted!") .setPositiveButton("OK", null) .show();
Builder构建需要提供一个Builder来封装构建的过程。构建的过程中每个参数设置函数继续返回构建中的Builder对象,从而支持链式的书写。最后调用一个表示完成的函数。如果是构建显示,可能取名字为show;如果构建一个一个异步任务,可能取名字为execute。
标签:
原文地址:http://my.oschina.net/sulliy/blog/490315