首页 > 其他 > 详细

[编码模式]Builder

时间:2015-08-10 20:24:39      阅读:126      评论:0      收藏:0      [点我收藏+]

背景

很多时候,我们可以看到一个对象的构造函数有很多参数。众多的参数里面,很多可以拥有缺省值,意味着在构造该对象是并不需要一一指定每一个参数。

在语言层面,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。


[编码模式]Builder

原文:http://my.oschina.net/sulliy/blog/490315

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!