设计模式(4) - 创建型模式 - 原型模式

1. 原型模式概述

1.1 什么是原型模式

  • 原型模式是指 原型实例指定创建对象的种类,并通过拷贝这些原型创建新的原型(说白了就是将一个对象复制一份)

1.2 原型模式使用的场景

  1. 类的初始化的时候,消耗的资源太多
  2. new 构造这个对象的时候,这个过程繁琐
  3. 构造函数还复杂的一p

2. 什么是深克隆、浅克隆

2.1 浅克隆概念

  • 对于数据类型是基本数据类型的成员变量,浅克隆会直接进行值的传递,也就是将该处属性值复制一份给新的对象。
  • 对于数据类型是引用数据类型的成员变量,比如说成员变量是某个对象、数组等,那么浅克隆会进行引用的传递,也就是将这个成员变量引用的内存地址赋值给新的对象。那么这么一来,这两个对象中的成员变量就指向了同一个实例。在这种情况下,显然,通过某一个对象操作其成员变量的内容 则会影响到另一个对象的成员变量。

2.2 深克隆概念

  • 其基本类型的成员变量跟浅克隆没啥区别
  • 对所有引用类型的成员变量在内存中开辟空间,并复制每个引用数据类型成员变量所引用的对象。也就是说。深克隆要对所有的成员变量进行拷贝,其引用数据类型的成员变量看似是一个,其实其内存空间已经不同,是两个对象了。

3. 浅克隆实现

非常简单

  1. 实现Cloneable接口
  2. 重新clone方法

3.1 克隆对象代码

在这里插入图片描述

  • 其内引用类型变量的内容为:

在这里插入图片描述

3.2 调用代码(解释在代码中)

也就是直接调用其clone方法即可,就可以复制一份了。

他们的内存地址是不同的。详情看代码注释

在这里插入图片描述

4. 深克隆实现

深克隆我这边是使用序列化在反序列化的方式,所以要求都要 实现 序列化接口(Serializable)

4.1 克隆对象代码

在这里插入图片描述

  • 下面是其内schoolClass 对象对应类的结构:

在这里插入图片描述

4.2 调用代码(解释在代码中)

在这里插入图片描述

5. 总结

总的来说,这个设计模式是用来复制对象的,我这边也就没有给出类图, 这个也是自己记录一下吧。毕竟这个的概念比较好理解,就没有弄类图。

猜你喜欢

转载自blog.csdn.net/weixin_42041788/article/details/106802695