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

    • 这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的,在实际开发当中应该注意这个潜在的问题。优点就是减少了约束,缺点也是减少了约束,需要大家在实际应用时考虑。
相关推荐
Lxinccode2 小时前
Java查询数据库表信息导出Word-获取数据库实现[1]:KingbaseES
java·数据库·word·获取数据库信息·获取kingbasees信息
元亓亓亓2 小时前
Java后端开发day36--源码解析:HashMap
java·开发语言·数据结构
sd21315122 小时前
RabbitMQ 复习总结
java·rabbitmq
豆沙沙包?3 小时前
5.学习笔记-SpringMVC(P61-P70)
数据库·笔记·学习
_一条咸鱼_4 小时前
深度揭秘!Android HorizontalScrollView 使用原理全解析
android·面试·android jetpack
_一条咸鱼_4 小时前
揭秘 Android RippleDrawable:深入解析使用原理
android·面试·android jetpack
_一条咸鱼_4 小时前
深入剖析:Android Snackbar 使用原理的源码级探秘
android·面试·android jetpack
_一条咸鱼_4 小时前
揭秘 Android FloatingActionButton:从入门到源码深度剖析
android·面试·android jetpack
_一条咸鱼_4 小时前
深度剖析 Android SmartRefreshLayout:原理、源码与实战
android·面试·android jetpack
_一条咸鱼_4 小时前
揭秘 Android GestureDetector:深入剖析使用原理
android·面试·android jetpack