当前位置: 首页 > news >正文

Android中大量使用建造者模式(Builder Pattern)的原因可以归结为以下几点:

1. 解耦对象的构建与表示

建造者模式将复杂对象的构建过程与其表示分离,这使得同样的构建过程可以创建不同的表示。在Android开发中,许多组件和视图需要配置多个属性和参数,通过建造者模式可以清晰地将这些属性的设置与对象的实际构造过程分开,使得代码更加模块化。

——说点我的理解,就是new对象里面构造函数里面有很多参数需要初始化,而实际使用的时候,不同的表示(这里理解为new出来的各个对象表示)需要初始化的参数不一,我build以后,调用对应的set接口,去set我需要的参数就行了,不需要参数初始化里面很多。

2. 避免构造方法参数过多

对于具有大量属性的对象,使用传统的构造方法创建对象可能会导致构造方法参数过多,参数顺序难以记忆和管理。而建造者模式通过链式调用(Chaining)设置属性,可以避免这一问题,使得代码更加清晰易读。例如,AlertDialog类通过AlertDialog.Builder来设置其多个属性,而不是将所有属性都放在AlertDialog的构造方法中。

——说点我的理解,这个比较浅显,就是new对象里面的参数太多了,会导致调用的时候,传参混乱容易出错。

3. 支持对象属性的变化

如果一个对象的属性有较高的变动性,使用建造者模式可以很方便地修改具体建造者的实现,而无需修改客户端的代码。这样可以降低耦合度,提高系统的可维护性和可扩展性。在Android开发中,UI组件的属性经常需要根据不同的需求进行调整,建造者模式为此提供了很好的支持。

——说点我的理解,在框架需要更新fwk这个类的构造函数,比如追加一个参数的时候,一堆app不用去改代码,也能正常兼容使用。

4. 良好的封装性

建造者模式将复杂对象的构建过程封装在建造者类中,外部代码只需要通过建造者类的接口来构建对象,而不需要知道对象内部的具体实现细节。这种封装性有助于隐藏复杂性,使得代码更加简洁和易于理解。

——说点我的理解,你关心你用的就行了,不需要关心我适配所有的函数怎么写的,但我就是这么一个好奇无聊的人,就想看代码怎么一行一行执行的,眼见为实。

5. 灵活性和可扩展性

建造者模式提供了灵活的构建流程,允许开发者根据需要逐步构建复杂对象。同时,由于建造者类和被构建的对象是分离的,因此可以很容易地添加新的构建步骤或修改现有的构建步骤,而不需要修改客户端代码。这种灵活性和可扩展性在Android开发中尤为重要,因为UI组件和应用程序逻辑经常需要根据新的需求进行调整和优化。

——说点我的理解,在框架需要更新fwk这个类的构造函数,比如追加一个参数的时候,一堆app不用去改代码,也能正常兼容使用。

6. 提高代码的可读性和可维护性

通过建造者模式构建的代码通常更加清晰和易于理解,因为每个构建步骤都是明确的,并且遵循一致的命名和调用规则。这有助于减少代码中的错误和遗漏,并提高代码的可维护性。在大型Android项目中,使用建造者模式可以显著提高代码质量和开发效率。

——说点我的理解,这个好理解,就跟我打扫卫生收纳一样,各种打包盒分门别类的打包。

综上所述,Android中大量使用建造者模式的原因主要包括解耦对象的构建与表示、避免构造方法参数过多、支持对象属性的变化、良好的封装性、灵活性和可扩展性,以及提高代码的可读性和可维护性。这些优点使得建造者模式成为Android开发中处理复杂对象构建问题的有力工具。

相关文章:

  • 【华为HCIP实战课程三】动态路由OSPF的NBMA环境建立邻居及排错,网络工程师
  • [Linux]僵尸进程,孤儿进程,环境变量
  • NGINX+LUA编译安装
  • 关于Obj文件格式介绍与Unity加载Obj文件代码参考
  • 9.24作业
  • vue实现左侧数据拖拽到右侧区域,且左侧数据保留且左侧数据不能互相拖拽改变顺序
  • 注册中心Eureka
  • 面试-2024年9月13号
  • I2C通信中的当前地址指针(CADDR)工作原理
  • 【韩顺平Java笔记】第3章:变量
  • Spring Boot 配置全流程 总结
  • 【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
  • 51单片机和ARM单片机的区别
  • “领航猿1号” 正式更名为 “AGI舰长”
  • 代码随想录冲冲冲 Day59 图论Part10
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • 4个实用的微服务测试策略
  • CentOS从零开始部署Nodejs项目
  • ERLANG 网工修炼笔记 ---- UDP
  • Fastjson的基本使用方法大全
  • GitUp, 你不可错过的秀外慧中的git工具
  • Hexo+码云+git快速搭建免费的静态Blog
  • If…else
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript 奇技淫巧
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Koa2 之文件上传下载
  • PHP CLI应用的调试原理
  • React-flux杂记
  • REST架构的思考
  • Spring Cloud中负载均衡器概览
  • Vue全家桶实现一个Web App
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 今年的LC3大会没了?
  • 使用权重正则化较少模型过拟合
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 微信小程序设置上一页数据
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 用简单代码看卷积组块发展
  • 正则表达式
  • 转载:[译] 内容加速黑科技趣谈
  • 自定义函数
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​如何使用QGIS制作三维建筑
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ‌内网穿透技术‌总结
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #职场发展#其他
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据