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开发中处理复杂对象构建问题的有力工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出MySQL事务处理:从基础概念到ACID特性及并发控制

1、什么是事务 在实际的业务开发中,有些业务操作要多次访问数据库。一个业务要发送多条SQL语句给数据库执行。需要将多次访问数据库的操作视为一个整体来执行,要么所有的SQL语句全部执行成功。如果其中有一条SQL语句失败,就进行事务的回滚&a…

RabbitMQ的应用问题

一、幂等性保障 幂等性是数学和计算机科学中某些运算的性质, 它们可以被多次应⽤, ⽽不会改变初始应⽤的结果 数学上的幂等性: f(x)f(f(x)) |x| 数据库操作幂等性: 数据库的 select 操作. 不同时间两次查询的结果可能不同, 但是这个操作是符合幂等性…

教务系统登录的分析

武汉纺织大学屏蔽了正方教务系统的默认登录页面,他们学校自定义的登录页面用户名和密码都是明文传输。可以使用Httpclient模拟登录。手动登录后,5次get请求才能获得真实的cookies。合肥工业大学需要3次。 第一次是POST请求。 Post请求的的下一个Location…

yum使用阿里云的镜像源报错 Failed connect to mirrors.aliyuncs.com:80; Connection refused“

报错:Failed connect to mirrors.aliyuncs.com:80; Connection refused",如果单独只是这个报错的话,那么原因是由于非阿里云ECS用户无法解析主机“mirrors.cloud.aliyuncs.com”。如果不单单只是这个报错另外还有其它报错请参考我其它文…

【SQL】筛选字符串与正则表达式

目录 语法 需求 示例 分析 代码 语法 SELECT column1, column2, ... FROM table_name WHERE condition; WHERE 子句用于指定过滤条件,以限制从数据库表中检索的数据。当你执行一个查询时,WHERE 子句允许你筛选出满足特定条件的记录。如果记录满…

[RabbitMQ] 7种工作模式详细介绍

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

Android Studio 新版本 Logcat 的使用详解

点击进入官方Logcat介绍 一个好的Android程序员要会使用AndroidStudio自带的Logcat查看日志,会Log定位也是查找程序bug的第一关键。同时Logcat是一个查看和处理日志消息的工具,它可以更快的帮助开发者调试应用程序。 步入正题,看图说话。 点…

特征工程——一门提高机器学习性能的艺术

当前围绕人工智能(AI)和机器学习(ML)展开的许多讨论以模型为中心,聚焦于 ML和深度学习(DL)的最新进展。这种模型优先的方法往往对用于训练这些模型的数据关注不足,甚至完全忽视。类似MLOps的领域正迅速发展,通过系统性地训练和利用ML模型&…

Hive SQL业务场景:连续5天涨幅超过5%股票

一、需求描述 现有一张股票价格表 dwd_stock_trade_dtl 有3个字段分别是: 股票代码(stock_code), 日期(trade_date), 收盘价格(closing_price) 。 请找出满足连续5天以上(含)每天上涨超过5%的股票,并给出连续满足…

C++入门基础知识93(实例)——实例18【猴子吃桃问题】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于猴子吃桃问题的相关内容! 关…

IP协议讲解

IP协议 IP协议的本质:提供一种能力,将数据跨网络从A主机传输到B主机 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. 4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大 的数字是15, 因…

天坑!Spark+Hive+Paimon+Dolphinscheduler

背景: 数据中台项目使用Spark+Hive+Paimon做湖仓底层,调度任务使用的是基于Dolphinscheduler进行二开。在做离线脚本任务开发时,在Paimon库下执行非查询类SQL报错。 INSERT报错 DELETE报错 现状: 原始逻辑为数据中台中选择的Paimon数据源,实际上在Dolphinscheduler中是…

synchronized关键字的作用、使用场景及锁升级过程。ReentrantLock与synchronized的区别及适用场景。

synchronized关键字的作用、使用场景及锁升级过程。 synchronized关键字的作用 synchronized是Java中的一个关键字,主要用于实现线程之间的同步。它的主要作用包括: 确保线程互斥地访问同步代码:当一个线程进入synchronized代码块或方法时&…

视频集成与融合项目中需要视频编码,但是分辨率不兼容怎么办?

在众多视频整合项目中,一个显著的趋势是融合多元化的视频资源,以实现统一监管与灵活调度。这一需求促使项目团队不断探索新的集成方案,确保不同来源的视频流能够无缝对接,共同服务于统一的调看与管理平台,进而提升整体…

TI DSP TMS320F280025 Note13:CPUtimer定时器原理分析与使用

TMS320F280025 CPUtimer定时器原理分析与使用 ` 文章目录 TMS320F280025 CPUtimer定时器原理分析与使用框图分析定时器中断定时器使用CPUtimers.cCPUtimers.h框图分析 定时器框图如图所示 定时器有一个预分频模块和一个定时/计数模块, 其中预分频模块包括一个 16 位的定时器分…

【机器学习基础】Transformer学习

Transformer学习 梯度消失FeedForward层激活函数的主要作用是在网络中加入非线性变换 梯度消失 梯度爆炸 FeedForward层 Transformer结构: Transformer结构主要分为两大部分: 一是Encoder层结构:Encoder 的输入由 Input Embedding 和 Positional Embedding 求和输入Multi…

生产环境升级mysql流程及配置主从服务

之前写到过mysql升级8.4的文章, 因此不再介绍mysql的安装过程 避免服务器安装多个mysql引起冲突的安装方法_安装两个mysql会冲突吗-CSDN博客 生产环境升级mysql8.4.x流程 安装mysql 参考之前文章: 避免服务器安装多个mysql引起冲突的安装方法_安装两个mysql会冲突吗-CSDN博客…

Nmap网络扫描器基础功能介绍

怎么快速知道网络中存在哪些设备呢?我们可以借用扫描工具Nmap来实现这个功能。 下载 Windows系统可以前往Nmap官网下载安装包。 Linux使用对应的包管理器可以直接安装,命令如下 # Debian/Ubuntu apt install nmap# RedHat/Fedora yum install nmap …

多个excel表数据比对操作

多个excel表数据比对操作 本文主要使用两种方法进行比对,分别使用了openpyxl第三方库和pandas第三方库进行数据比对 两种方法优缺点: openpyxy: 优点:主要是处理xlsx的文件,里面方法简单,易懂 缺点:当数据…

Squaretest单元测试辅助工具使用

1、idea安装插件 Squaretest 然后关掉idea 2、安装字节码软件(jclasslib) 3、找到idea里面的Squaretest安装目录 找到包含TestStarter的jar包 4、打开 com.squaretest.c.f 打开后选择常量池 5、找到第16个修改 Long value值,修改的数字即为使…