「java原型模式怎么用」什么时候用原型模式

博主:adminadmin 2023-01-10 17:42:07 1359

本篇文章给大家谈谈java原型模式怎么用,以及什么时候用原型模式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

原型模式--你会用么?

是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。(创建性模式)

原型模式的核心在于拷贝原型对象。以系统中已存在的一个对象为原型,直接基于 内存 二进制流进行拷贝,无需再经历耗时的对象初始化过程(不需要关注创建细节、构造函数),性能提升许多;当构建过程比较耗时时,可以利用已存在的对象作为原型,对其进行克隆。

1、类初始化消耗的资源相对较多。

2、new 产生的一个对象需要非常繁琐的过程(数据准备,访问权限等)。

3、构造函数比较复杂

4、循环体中生产大量的对象时。

在Spring中,原型模式应用得非常广泛。例如 scope = “prototype”,在我们经常用的JSON。parseObject()也是一种原型模式。

先创建原型IPrototype接口,如下图:

具体实现类,如下图

实际开发中,JDK已经帮我们实现了一个现成的API,我们只需要实现Cloneable接口即可。如下图:

这里增加两个概念:

浅克隆:

浅克隆就是把原对象m1的内存完全copy一份,在堆中开辟一个新的空间放置,里面的引用对象也只是复制了它的classpath,并不会对m1中的所有引用对象再重新开辟一个空间,这样就导致了这两个对象除了基本类型以外,其余类型的成员变量还是指向了同一块内存地址,那么当这个地址被改变的时候,m1,m2中的对应成员变量也会跟着改变(引用关系如下图):

深克隆:

深克隆刚好就是为了解决这个问题,它会把m1中的引用类型等的成员变量也copy一份出来,放到一个新的地址中,然后m2这些成员变量的classpath指向这个新copy出来的地址,这样被copy出来的对象也就完全独立开来了(引用关系如下图):

如果我们克隆的目标对象是单例对象,那意味着,深克隆就会破坏单例。实际上防止克隆破坏单例解决思路非常简单,禁止深克隆便可。

原型模式-CV大法

原型模式,简单的理解就是CTRL C CTRL V

文艺点那叫照猫画虎

让我们简简单单的复制一个对象吧

直接创建对象的代价比较大时,则采用这种模式

联系实际生活中的例子:

Java 原生支持原型模式

创建关键点:

这是一个实现Cloneable的产品

3D打印机

原型模式

从定义中我们我们可以发现,该模式的前提是首先需要有一个对象,然后基于已有的对象复制生成新的对象,新生成的对象状态和原对象是一样的,不一样的是内存地址。

上述只有两个类,一个是ICloneable接口,该接口继承自java.lang.Cloneable接口,Cloneable接口是一个标记接口,本身没有什么方法,但是调用某个对象的clone方法必须要实现该接口,这里我借助该接口并扩展了ICloneable接口,所有ICloneable接口的实现类都必须要具备复制自己的能力,你可以发现,当前的设计中没有要求实现者必须是深拷贝或者浅拷贝。此外这里的接口作为一个标记来处理的方式很精巧,在日常开发中我们也可以这样做,比如设计一个防混淆的接口,所有该接口的实现者都在proguard中配置不混淆。

第二个类是ICloneable实现者,其copy方法对外提供了复制自身的能力,Message类中的what变量属于基本数据类型,该变量会被直接复制后赋值给新对象,而description变量是对象类型,目前copy方法采用了默认处理( clone方法默认是浅拷贝 ),所以该变量仍然指向旧对象中decscription变量所指向的string对象。

在解释原型模式的定义时,我们说原型对象是基于已有对象进行复制来生成新的对象,那么新生成对象时会执行构造函数吗?

在Java中,创建一个堆上对象有五种方式:

clone的行为是很简单的。以堆上的内存存储解释的话(不计内务内存),对一个对象a的clone就是在堆上分配一个和a在堆上所占存储空间一样大的一块地方,然后把a的堆上内存的内容复制到这个新分配的内存空间上

java原型模式怎么用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于什么时候用原型模式、java原型模式怎么用的信息别忘了在本站进行查找喔。