Android设计模式:Builder模式解析与应用实践
103 浏览量
更新于2024-09-05
收藏 67KB PDF 举报
Android设计模式之Builder模式解析
Android设计模式中的Builder模式是一种非常重要的设计模式,它可以将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。在Android开发过程中,Builder模式可以应用于各种场景,例如AlertDialog和universal-image-loader等。
Builder模式的定义是将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。它的使用场景包括:当初始化一个对象特别复杂时,如参数多,且很多参数都具有默认值时;相同的方法,不同的执行顺序,产生不同的事件结果时;多个部件或零件,都可以装配到一个对象中,但是产生的运行效果又不相同时;产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用。
在Builder模式的实现中,需要将需要通过set方法来设置的多个属性封装在一个配置类里面,每个属性都应该有默认值。具体的set方法放在配置类的内部类Builder类中,并且每个set方法都返回自身,以便进行链式调用。
以图片加载框架ImageLoder为例,未采用Builder模式的ImageLoader可能会存在多个set方法,例如setImageCache()、setLoadingImageId()等,每个方法都需要单独调用。这将使得代码变得冗长难读。使用Builder模式可以将这些set方法封装在一个配置类里面,例如:
public class ImageLoader {
private int loadingImageId;
private int loadingFailImageId;
// 省略其他属性
public static class Builder {
private int loadingImageId;
private int loadingFailImageId;
// 省略其他属性
public Builder setLoadingImageId(int loadingImageId) {
this.loadingImageId = loadingImageId;
return this;
}
public Builder setLoadingFailImageId(int loadingFailImageId) {
this.loadingFailImageId = loadingFailImageId;
return this;
}
// 省略其他set方法
public ImageLoader build() {
return new ImageLoader(this);
}
}
}
这样,在使用ImageLoader时,可以使用链式调用来设置多个属性,例如:
ImageLoader imageLoader = new ImageLoader.Builder()
.setLoadingImageId(R.drawable.loading)
.setLoadingFailImageId(R.drawable.fail)
.build();
这将使得代码变得简洁易读。同时,Builder模式还可以帮助我们避免对象的不完整状态,因为Builder类可以确保对象的所有属性都被设置了默认值。
Builder模式是一种非常重要的设计模式,能够帮助我们简化对象的构建过程,提高代码的可读性和可维护性。在Android开发过程中,Builder模式可以应用于各种场景,例如AlertDialog和universal-image-loader等。
132 浏览量
2018-05-05 上传
156 浏览量
670 浏览量
126 浏览量
2017-11-24 上传
225 浏览量
2017-12-05 上传
点击了解资源详情
weixin_38566180
- 粉丝: 2
- 资源: 967
最新资源
- kubectx:在kubectl中的集群和名称空间之间切换的更快方法
- 易语言菜单栏上加按钮
- 基于STM32的RS485通信实验_STM32F103_RS485modbusstm32_rs485_rs485通讯_stm32
- TravelClockX
- 滑动标签页导航
- base64-web:Nodejs Express应用程序,用于对base64进行编码和解码
- phillyco:电子商务SPA-完全充实的电子商务Web应用程序,具有身份验证,购物车和支付网关
- openCMT:Georg Nebehay 和 Roman Pflugfelder 在论文“Consensus-based Matching and Tracking of Keypoints for Object Tracking”中描述的跟踪算法的 C++ 库实现
- drmon:DraconicReact堆计算机监控和故障安全界面
- 全国省市县数据+拼音+经纬度 _经纬度数据_数据
- libtensorflow-gpu-linux-x86_64-1.12.0.tar.gz
- MyPortfolio
- 易语言pXiY4L4g源码,易语言uv3yxbcN源码,易语言获取系统进程
- AudibleHero for Audible-crx插件
- files_external_listing:OwnCloud files_external应用程序的交互式目录列表
- 平衡小车之家资料_平衡小车_小车_平衡小车之家_小车平衡之家_平衡小车之家资料