定义
菜鸟教程
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用
大话设计模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
《Android源码设计模式解析与实践》
特点
最大的特点是:implements Cloneable;但凡实现Cloneable接口的一般都满足原型模式。当然也不排除有其他变种情况,不过目前没有碰到。如果有请留言分享,或者后期我碰到后再补充。
注意事项:
与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。浅拷贝实现 Cloneable,重写,深拷贝是通过实现 Serializable 读取二进制流。
使用场景
- 简历模板
- 历史文档修改记录(比如:飞书、腾讯等在线编辑文档)
浅拷贝、深拷贝
浅拷贝
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深拷贝
把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象
Glide原型模式应用
包路径:com.bumptech.glide.TransitionOptions
被RequestBuilder调用,同时RequestBuilder也是原型模式,两者结合正好说明浅拷贝和深拷贝。TransitionOptions属于浅拷贝那种
RequestBuilder调用了TransitionOptions的clone()属于深拷贝那种。当然深浅拷贝取舍也是根据实际业务场景设定的。
再补充一个BaseRequestOptions
总结
具体的业务上和功能上的介绍就免了,如果有兴趣可以自行翻译。本文介绍的是原型模式的结构以及深浅拷贝的说明。聚焦设计模式解析,争取读完一个模式解析即可在项目上进行应用。
下载地址:
https://pan.baidu.com/s/1kFAGbsFIk3dDR64NwM5y2A?pwd=csdn