码迷,mamicode.com
首页 > 其他好文 > 详细

[编码模式]Builder

时间:2015-08-10 20:27:35      阅读:133      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!