type
Post
status
Published
date
Oct 30, 2022
slug
prototype-design-pattern-of-creation-pattern
summary
tags
原型
category
设计模式
icon
password
一、原型模式介绍
如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行 复制或克隆 的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。
对象的创建成本比较大是什么意思?
- 创建对象包含的申请内存、给成员变量赋值这一过程,本身并不会花费太多时间,或者说对于大部分业务系统来说,这点时间完全是可以忽略的。应用一个复杂的模式,只得到一点点的性能提升,这就是所谓的过度设计,得不偿失。
- 但是,如果对象中的数据需要经过复杂的计算才能得到(比如排序、计算哈希值),或者需要从 RPC、网络、数据库、文件系统等非常慢速的 IO 中读取,这种情况下,我们就可以利用原型模式,从其他已有对象中直接拷贝得到,而不用每次在创建新对象的时候,都重复执行这些耗时的操作。
二、原型模式实现
浅拷贝
- 基本类型为值拷贝
- 引用类型为引用拷贝,只拷贝一份引用
顶层父类 Object.clone() 方法就是浅拷贝!
深拷贝
- 基本类型为值拷贝
- 引用类型为创建新对象进行值拷贝,若有嵌套进行递归拷贝
深拷贝实现方式:
- 每个子对象都实现 Cloneable 接口,并重写clone方法。在最顶层的类的重写的 clone 方法中调用所有子对象的 clone 方法即可实现深拷贝。(人话:引用类型内部都是基本类型构成)
- 使用序列化机制,先对对象进行序列化,紧接着马上反序列化出。
序列化代码例子:
- 作者:NotionNext
- 链接:https://tangly1024.com/article/prototype-design-pattern-of-creation-pattern
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

