Android源码设计模式解析与实战第2版笔记(四)

第三章 自由扩展你的项目--Builder 模式

Builder 模式的定义

  • 将一个复杂对象的构建与它的表示分离 ,使得同样的构建过程可以创建不同的表示

Builder 模式的使用场景

  • 相同 的方法,不同 的执行顺序,产生不同的事件结果时

  • 多个部件或零件,都可以装配到一个 对象中,但是产生的运行结果又不相同

  • 产品类非常复杂 ,或者产品类中的调用顺序不同 产生了不同的作用,这个时候使用建造者模式非常合适

  • 初始化一个对象特别复杂 ,如参数多,且很多参数都具有默认值

Builder 模式的 UML 类图

  • Product:产品的抽象类
  • Builder:抽象 Builder 类,规范产品的组建,一般是由子类实现具体的组建过程
  • ConcreteBuilder:具体的 Builder 类
  • Director:统一组装过程。

Builder 模式总结

  • Builder 模式在 Android 开发中也较为常用,通常作为配置类的构建器 将配置的构建和表示分离 开来,同时也是将配置从目标类中隔离出来,避免过多的 setter 方法。

  • Builder 模式比较常见的实现形式是通过调用链实现,这样使得代码更简洁、易懂,避免了目标类中被过多的接口"污染"。

  • 优点

    • 良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节
    • 建造者独立,容易扩展
  • 缺点

    • 会产生多余 的 Builder 对象以及 Director 对象,消耗内存

第四章 使程序运行更高效--原型模式

原型模式的定义

  • 原型实例 指定创建对象的种类,并通过复制 这些原型创建新的对象

原型模式的使用场景

  • 类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等,通过原型复制避免这些消耗

  • 通过new 产生一个对象需要非常繁琐的数据准备或访问权限,这时可以使用原型模式

  • 一个对象需要提供给其他对象 访问,而且各个调用者可能都需要修改其值 时,可以考虑使用原型模式复制多个对象供调用者使用,即保护性拷贝

原型模式的 UML 类图

  • Client:客户端用户。
  • Prototype:抽象类或者接口,声明具备 clone 能力
  • ConcretePrototype:具体的原型类。

原型模式小结

  • 使用原型模式可以解决构建复杂对象的资源消耗 问题,能够在某些场景下提升 创建对象的效率

  • 还有一个重要的用途就是保护性拷贝 ,也就是某个对象对外可能是只读的,为了防止外部对这个只读对象修改,通常可以通过返回一个对象拷贝的形式实现只读的限制。

  • 优点

    • 原型模式是在内存中二进制流的拷贝 ,要比直接new一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
  • 缺点

    • 这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的,在实际开发当中应该注意这个潜在的问题。优点就是减少了约束,缺点也是减少了约束,需要大家在实际应用时考虑。
相关推荐
benbenAItalk19 分钟前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl25 分钟前
Java学习二 基本语法2, 算术运算符
java·学习
niucloud-admin38 分钟前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_9628857239 分钟前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户1 小时前
Java锁
java·开发语言
柳鲲鹏2 小时前
运气学概论:提纲草案
笔记
shehuiyuelaiyuehao3 小时前
1计算机是如何工作的
java·计算机网络
一航jason3 小时前
Android平台推理框架及试用场景模型对比
android·人工智能·ai·架构·ai编程·llama
一航jason3 小时前
Android 端侧大模型推理框架对比
android·人工智能·ai·ai编程·llama·ai-native
letisgo53 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理