定义:是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 。

           调用者不需要知道任何创建细节,不调用构造函数。

适用场景:

  1. 类初始化消耗资源较多
  2. New产生的一个对象需要非常繁琐的过程 (数据准备,访问权限等)
  3. 构造函数比较复杂

例如:Dto转换成Vo的过程中,需要通过set方法进行大量的操作,这个时候我们可以使用原型模式

我们用的BeanUtils,JSON.parseObject()、Guava等工具类都是使用原型模式,以及Spring的Score属性 

score = "prototype";  

 score = "singleton";

接下来介绍原型模式的使用方式:

深克隆:将对象的属性不仅仅拷贝值,而是将重新常见对象,重新赋值。例如Arrays.copy() 方法 。

常见设计模式-原型模式

   常见设计模式-原型模式

深度克隆通过字节码方式构造出一个新的对象(实例)

浅克隆:仅仅拷贝值,对个对象的属性引用指向同一个内存地址,不拷贝引用。

常见设计模式-原型模式

我们可以通过测试发现:

常见设计模式-原型模式

我们可以看出深度克隆不仅仅拷贝值,而是将重新常见对象,重新赋值。

当然原型模式也有它的缺点:

  1. 必须配备克隆(或者可拷贝)的方法
  2. 对克隆复杂对象或对克隆出的对象进行复杂改造时,易带来风险。
  3. 深拷贝、浅拷贝要运用的当。    

相关文章: