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

    • 这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的,在实际开发当中应该注意这个潜在的问题。优点就是减少了约束,缺点也是减少了约束,需要大家在实际应用时考虑。
相关推荐
曼岛_1 小时前
[安卓逆向]编写第一个安卓项目(一)
android·安卓逆向
寻道码路2 小时前
LangChain4j Java AI 应用开发实战(四):提示词工程进阶 - 模板化与结构化 Prompt 设计
java·人工智能·ai·prompt·aigc
lcreek7 小时前
Java 反序列化漏洞深度解析(一):从URLDNS到真正的DNS探测
java·反序列化漏洞
杰克尼7 小时前
天机学堂复习总结(day03-day04)
java·开发语言·redis·elasticsearch·spring cloud
x***r1518 小时前
jdk-11.0.16.1_windows使用步骤详解(附JDK 11环境变量配置与验证教程)
java·开发语言·windows
EllinY8 小时前
CF2217E Definitely Larger 题解
c++·笔记·算法·构造
nnsix8 小时前
JIT(即时编译)、 AOT(预先编译)、虚拟机CLR 笔记
笔记
弹简特8 小时前
【Java项目-轻聊】01-项目演示+项目介绍+准备工作+项目源码
java
luck_bor9 小时前
File类&递归作业
java·开发语言
NULL指向我9 小时前
Simplis仿真笔记1:Simplis_V8.4_x64安装过程
笔记