设计模式-原型模式(Prototype)
概要
记忆关键词:原型实例、拷贝
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
分析:原型模式就是从一个样板对象中复制出一个内部属性一致的对象。它是在内存中拷贝二进制流,比new一个对象的性能好很多。
原型模式结构图如下:
## 1.涉及知识点
- 深拷贝和浅拷贝:深拷贝和浅拷贝是只针对引用数据类型的
### 1.1 浅拷贝
- 浅拷贝是在按位(bit)拷贝对象,这个对象有着原始对象属性值的一份精确拷贝
- 如果有嵌套对象的时候,使用浅拷贝会带来数据安全方面的隐患,这就到了需要深拷贝的时候
### 1.2 深拷贝
- 对于有多层对象的,每个对象都需要实现Cloneable并重写clone()方法,才可以实现了对象的串行层层拷贝。
说明:彻底的深拷贝几乎是不可能实现的,那样不但可能存在引用关系非常复杂的情况,也可能存在引用链的某一级上引用了一个没有实现Cloneable接口的第三方对象的情况。
## 2.核心用途
- 解决构建复杂对象的资源消耗问题,提升创建对象的效率。(比如在循环体内产生大量对象的时候)
- 保护性拷贝,防止外部对只读对象进行修改。
## 3.分析
- 原型模式就是从一个样板对象中复制出一个内部属性一致的对象
- 原型模式是在内存中拷贝二进制流,比new一个对象的性能好很多
- 绝大多数设计模式都是牺牲性能提升开发效率的,原型模式则是为数不多的牺牲开发效率提升性能的设计模式
## 4.注意
- 原型模式中的拷贝不会执行构造函数,这是因为原型模式是通过克隆来创建新对象的,而不是通过构造函数。当我们使用原型模式时,需要注意一些情况:
- 1)成员变量的克隆: 如果对象中包含引用类型的成员变量,需要确保这些引用类型也能正确地进行克隆。如果不进行深拷贝,那么原型模式的克隆对象和原对象中的引用类型成员将指向相同的对象,这可能导致意外的修改。
- 2)克隆方法的实现: 类需要实现 Cloneable 接口,并重写 clone 方法。在 clone 方法中,要确保对引用类型进行适当的克隆,以防止浅拷贝问题。
- 3)构造函数的注意事项:由于克隆不会执行构造函数,因此如果在构造函数中进行了一些重要的初始化工作,我们需要确保这些初始化工作在克隆后得到正确的结果。
有时候,我们可能需要在克隆方法中手动执行必要的初始化步骤。
## 5.应用场景
- Java的Object类中
在Java语言中,Object类实现了Cloneable接口,一个对象可以通过调用Clone()方法生成对象,这就是原型模式的典型应用
标签:设计模式,克隆,对象,模式,原型,拷贝,Prototype,构造函数 From: https://www.cnblogs.com/hld123/p/18320522