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

    • 这既是它的优点也是缺点,直接在内存中拷贝,构造函数是不会执行的,在实际开发当中应该注意这个潜在的问题。优点就是减少了约束,缺点也是减少了约束,需要大家在实际应用时考虑。
相关推荐
w_31234547 分钟前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安9 分钟前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA12 分钟前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_192849990619 分钟前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
爱码小白27 分钟前
网络编程(王铭东老师)笔记
服务器·网络·笔记
张国荣家的弟弟37 分钟前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S1 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
越甲八千1 小时前
重温设计模式--享元模式
设计模式·享元模式
yuanbenshidiaos1 小时前
C++----------函数的调用机制
java·c++·算法
LuH11241 小时前
【论文阅读笔记】Learning to sample
论文阅读·笔记·图形渲染·点云