概述
创建型模式:重点在创建一个新的对象
-
原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。
-
不会直接使用本体,本体给外部提供一个克隆体进行使用
使用场景
- 资源优化
- 性能和安全要求
- 一个对象多个修改者的场景。
- 一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时可以考虑使用原型模式拷贝多个对象供调用者使用。
- 深(两个完全对象不一样的【递归克隆】,内容却完全一样)、浅(只是属性赋值)…
浅拷贝
package com.xusj.future.prototype;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 浅拷贝:原型类
* <p>
* 1、Object类提供的方法clone只是拷贝本对象 , 其对象内部的数组、引用对象等都不拷贝,
* 还是指向原生对象的内部元素地址
* <p>
* 2、实现
* 被克隆的对象必须Cloneable,Serializable这两个接口
* <p>
* 3、浅克隆的问题:虽然产生了两个完全不同的对象,但是被复制的对象的所有变量都含有与原来的
* 对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
*
* @author xusj
* <br>CreateDate 2022/7/17 23:09
*/
@Data
public class User implements Cloneable, Serializable {
private String name;
private String nike;
/**
* 仅拷贝本对象,对该对象其中的数组、引用对象都不拷贝,还是指向原生的对象的内部元素地址
*/
private Date birth;
/**
* 实现克隆接口
*/
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
深拷贝(仅仅有注释,具体参考连接java原型模式)
package com.xusj.future.prototype;
/**
* 深拷贝:原型类
* <p>
* 1、深复制把要复制的对象所引用的对象都复制了一遍。本对象和本对象其中的引用对象都进行复制
* <p>
* 2、两种方式
* 深度克隆(deep clone)有两种实现方式,第一种是在浅克隆的基础上实现(在克隆方法中对引用对象new一个新对象)
* ,第二种是通过序列化和反序列化实现(写版本号,使用流),我们分别来介绍
*
* @author xusj
* <br>CreateDate 2022/7/17 23:18
*/
public class Dog {
}
原型模式和直接new对象方式的比较
当我们需要大量的同一类型对象的时候可以使用原型模式,下面是两种方式的性能对比:
用两种方式同时生成10个对象我们
可以直接去调用clone方法,效率高于我们使用new
开发中的应用场景
原型模式很少单独出现,一般是和工厂方法模式一起出现,通过clone的方法创建一个对象,然后由工厂方法提供给调用者。
• spring中bean的创建实际就是两种:单例模式和原型模式。(原型模式需要和工厂模式搭配起来)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/96228.html