您当前的位置: 首页 > 

命运之手

暂无认证

  • 1浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【设计模式】【09】原型模式

命运之手 发布时间:2022-04-17 17:27:39 ,浏览量:1

应用场景

原型模式,英文名Prototype Pattern

该模式通过内存拷贝的方式,快速复制出一个新对象,而不是通过构造方法重新去构建

使用情景主要有以下几种

  • 性能要求高,对象创建频繁,通过内存拷贝的方式可以大幅提升性能
  • 对象构建过程很复杂,不如直接拷贝生成,然后再修改个别字段
  • 新对象的初始值,完全继承自上个对象,可以直接拷贝,没必要再建一个空对象逐个赋值

实现代码

在Java中,内存拷贝主要是通过clone函数来实现的

这是一个native方法,必须实现Cloneable接口后才可使用

通过clone函数创建的对象,不会调用构造方法


	//不使用public权限,这样只有通过Factory才能创建
	class Product implements Cloneable {
	
	    @Override
	    @SneakyThrows
	    public Product clone() {
	        return (Product) super.clone();
	    }
	}
	
	public class Factory {
	
	    private static final Product product = new Product();
	
	    //通过内存拷贝的方式创建新对象
	    synchronized public static Product createProduct() {
	        return product.clone();
	    }
	}

深拷贝和浅拷贝

我们以上的Product是一个比较简单的类

对于复杂的类来说,一个类中可能还包含其它类的实例对象

浅拷贝是指只拷贝最外层对象,成员对象直接引用原地址

深拷贝是指成员对象也进行内存拷贝,而成员对象本身可以也有自己的成员变量,所以需要递归进行内存拷贝

Java的clone函数是浅拷贝的,深拷贝需要自己去实现

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0396s