设计模式之3原型模式

如果你想克隆一个你自己,那么原型模式了解一下。与单例模式相反,原型模式就是要多少个对象就有多少个对象。


一、什么是原型模式?

原型模式是一种创建型设计模式,原型(Prototype)模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

感觉有点绕?简单来说,原型模式在Java中就是clone()方法的使用,"复制“一个对象生成另外一个对象。

它主要面对的问题是:“某些结构复杂的对象”的创建工作。可以利用原型模式简化对象的创建过程,同时也能够提高效率。

二、如何实现原型模式?

1.用UML类图描述原型模式

设计模式之3原型模式_第1张图片
UML类图描述下的原型模式

2.具体javademo代码

(1).浅拷贝的介绍:

1)对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。

2)对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。因为实际上两个对象的该成员变量都指向同一个实例。在这种情况下,在一个对象中修改该成员变量会影响到另一个对象的该成员变量值.

设计模式之3原型模式_第2张图片
原型模式之浅克隆


设计模式之3原型模式_第3张图片
原型模式之浅克隆含引用类型

(2).深拷贝的介绍:

1)  复制对象的所有基本数据类型的成员变量值

2)  为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。也就是说,对象进行深拷贝要对整个对象进行拷贝,而不仅仅是对象的地址

设计模式之3原型模式_第4张图片
重写clone方法来实现深拷贝
设计模式之3原型模式_第5张图片
对象序列化实现深拷贝

三、实际应用的例子

spring源码中的prototype......

你可能感兴趣的:(设计模式之3原型模式)