海加尔金鹰||弋超帆

记录精彩的程序人生

目录
设计模式学习笔记之原型模式
/  

设计模式学习笔记之原型模式

前言

这是一篇学习笔记,内容很多是来源于网上的资料,按照自己学习情况进行的总结。
我的个人博客:海加尔金鹰

什么是原型模式

原型模式:通过已有的实例对象进行复制来创建新的相同对象。
特点:

  • 1 必须已经有一个实例对象存在。
  • 2 通过原型模式创建的对象避免了构造器的约束,即不会调用构造器。
  • 3 通过原型模式创建的对象和原始的对象属性值是一样的。

## 原型模式的实现
### 核心结构

 (1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。
(2)ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
(3)Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。2

核心代码

1 实现Cloneable接口
2 clone()方法 在java当中Object类种就有clone()方法

浅克隆和深克隆

浅克隆:当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。
深克隆:除了对象本身被复制外,对象所包含的所有成员变量也将被复制。2
深克隆与浅克隆的区别就是,浅克隆不会克隆原对象中的引用类型,仅仅拷贝了引用类型的指向。深克隆则拷贝了所有。也就是说深克隆能够做到原对象和新对象之间完全没有影响。1
具体实现代码及相关验证:见末尾网上资料

原型模式的优缺点及应用场景

优缺点

优点:
(1):提高性能,简洁代码。
(2):避免了构造器的约束。
注:查找资料时看到还有一些其他的优点,但是这两点给我最直观的感受。
缺点:
(1):需要为每一个类配置一个克隆方法,而且该克隆方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违反了开闭原则。2
(2):在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重签到引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来会比较麻烦。2
(3):由于使用原型模式复制对象时不会调用类的构造方法,所以原型模式无法和单例模式组合使用。3

应用场景

  1. 创建新对象成本比较大。
  2. 一个对象有多个修改人。
  3. 对对象的状态进行记录。

这周过的心惊胆战啊,地震很吓人啊。


  1. 浅克隆和深克隆的区别:https://blog.csdn.net/jeffleo/article/details/76737560

  2. 设计模式原型模式:https://www.cnblogs.com/songyaqi/p/PrototypePattern.html

  3. Java设计模式之原型模式的优点及缺点讲解:https://www.2cto.com/kf/201802/717717.html

用心聆听,深深呼吸,烟花雨,梨花月,寄一缕风的香魂,远离喧嚣。
评论