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一个对象性能好很多,特别是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。
  • 缺点

    • 这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的,在实际开发当中应该注意这个潜在的问题。优点就是减少了约束,缺点也是减少了约束,需要大家在实际应用时考虑。
相关推荐
Pniubi8 小时前
怎么排查慢SQL,怎么解决?
java·数据库·sql
一只大鸽子9 小时前
游戏开发笔记4-像素画基础 轮廓-直线和曲线
笔记
薛之谦_9 小时前
Java 全栈知识体系:从 IDEA 高效开发到 JVM、并发与 Stream 实战
java·jvm·intellij-idea
LinXunFeng9 小时前
拿竞品 App 一扫,技术栈全暴露了
android·flutter·开源
小杨小杨、努力变强!10 小时前
python学习笔记
笔记·学习
Gracker12 小时前
AIW:从系统机制到性能排查,一本可以对照源码的 Android 电子书
android
三少爷的鞋12 小时前
代码越来越便宜,判断力越来越贵:AI 时代的 Android 架构与协程避坑指南
android
杨逢昌工厂6S管理12 小时前
150-杨逢昌一线现场诊断笔记:越管一线越抵触背后的熵增机理与基准化治理
经验分享·笔记·职场和发展·学习方法
文丑颜不良啊13 小时前
LeetCode2761~2780题目解析
java·leetcode
用户6242931966214 小时前
告别 Electron 臃肿与 Wireshark 老化界面:用 Rust + Tauri 2.0 构建多总线网络与现场总线深度分析仪 Omni-Probe
设计模式