当前位置: 首页 > news >正文

成都营销型网站建设熊掌号重庆网站建设选承越

成都营销型网站建设熊掌号,重庆网站建设选承越,一个主机可以建设多少个网站,上行2m可以做网站1、定义 原型模式是一种创建型模式,用于创建重复的对象,并且保证性能。原型模式创建的对象是由原型对象自身创建的,是原型对象的一个克隆,和原型对象具有相同的结构和相同的值。 2、适用场景 创建对象时我们不仅仅需要创建一个新…

1、定义
原型模式是一种创建型模式,用于创建重复的对象,并且保证性能。原型模式创建的对象是由原型对象自身创建的,是原型对象的一个克隆,和原型对象具有相同的结构和相同的值。

2、适用场景

  1. 创建对象时我们不仅仅需要创建一个新的对象,可能我们还需要对象创建出来里面的值和某一个对象也要完全一致,原型模式可以保证结构和值都相同。
  2. 创建对象时我们希望对创建出来的对象的修改不影响到原来的对象,可能通过原型模式进行创建,进行深度克隆。
  3. 创建对象时,如果对象是个复杂对象,里面又包含了其他的复杂对象,我们希望创建的对象和原有对象保持一致,传统模式new会非常麻烦,还需要考虑到里面其他的复杂对象,这时候可以使用原型模式进行创建。

3、 原型模式的核心是就是原型类 Prototype,Prototype 类需要具备以下两个条件:

  • (1)实现 Cloneable 接口:在 Java 中 Cloneable 接口的作用就是在运行时通知虚拟机可以安全地在实现了 Cloneable 接口的类上使用 clone() 方法,只有在实现了 Cloneable 的类才可以被拷贝,否则在运行时会抛出 CloneNotSupportedException 异常。
  • (2)重写 Object 类中的 clone() 方法:Java 中所有类的父类都是 Object,Object 中有一个clone() 方法用于返回对象的拷贝,但是其作用域 protected,一般的类无法调用,因此,Prototype 类需要将 clone() 方法的作用域修改为 public。

​ 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式。在实际应用中,原型模式很少单独出现。经常与其他模式混用,他的原型类Prototype也常用抽象类来替代。

4、注意事项

(1)使用原型模式复制对象不会调用类的构造函数,对象是通过调用 Object 类的 clone() 方法来完成的,它直接在内存中复制数据。不但构造函数不会执行,甚至连访问权限都对原型模式无效。单例模式中,需要将构造函数的访问权限设置为 private,但是 clone() 方法直接无视构造方法的权限,所以单例模式与原型模式是冲突的,在使用时需要注意。

(2)深拷贝与浅拷贝。Object 类的 clone() 方法只会拷贝对象中的基本的数据类型(8种基本数据类型 byte,char,short,int,long,float,double,boolean 和对应的封装类),对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。

  • 浅拷贝:只克隆对象中的基本数据类型,而不会克隆数组、容器、引用对象等。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。如果变量为String字符串,则拷贝其引用地址,但是在修改的时候,它会从字符串池中重新生成一个新的字符串,原有的字符串对象保持不变。
  • 深拷贝:把要克隆的对象所引用的对象都克隆了一遍。

代码实例


/*** @Author charles.yao* @Description* @Date 2023/2/13 14:54*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Animal implements Cloneable {private String userName;private String userAge;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}/*** @Author charles.yao* @Description 浅拷贝类* @Date 2023/2/13 14:53*/
@NoArgsConstructor
@AllArgsConstructor
@Data
public class UserInfo implements Cloneable {private String userName;private String userAge;private Animal animal;@Overrideprotected UserInfo clone() throws CloneNotSupportedException {UserInfo userInfo = (UserInfo) super.clone();userInfo.setAnimal((Animal) animal.clone());return userInfo;}
}/*** @Author charles.yao* @Description 浅拷贝测试* @Date 2023/2/13 14:57*/
public class DeepCopyTest {public static void main(String[] args) {try {UserInfo userInfo = new UserInfo();userInfo.setUserName("张三");userInfo.setUserAge("1223");userInfo.setAnimal(new Animal("111", "2122"));UserInfo clone = userInfo.clone();System.out.println("原数据" + userInfo.toString());System.out.println("拷贝之后" + clone.toString());System.out.println(userInfo == clone);System.out.println(userInfo.getAnimal() == clone.getAnimal());userInfo.getAnimal().setUserName("二狗");System.out.println("原数据动物" + userInfo.getAnimal().toString());System.out.println("拷贝之后动物" + clone.getAnimal().toString());} catch (CloneNotSupportedException e) {e.printStackTrace();}}
}

运行结果

原数据UserInfo(userName=张三, userAge=1223, animal=Animal(userName=111, userAge=2122))
拷贝之后UserInfo(userName=张三, userAge=1223, animal=Animal(userName=111, userAge=2122))
false
false
原数据动物Animal(userName=二狗, userAge=2122)
拷贝之后动物Animal(userName=111, userAge=2122)
http://www.15wanjia.com/news/188712.html

相关文章:

  • 六安网站任务推广引流平台
  • 做细胞激活的母液网站友好速搭 WordPress
  • 个人如何制作一个网站邯郸网站建设唯辛ls15227
  • 做网站用什么浏览器最好wordpress如何设置目录
  • 表白网站生成器俄罗斯电商平台ozon中文
  • 海南电子商务网站wordpress 相对路径
  • 太仓网站制作书生网络营销广告词有哪些
  • 网站备案幕布psd蓝色通用营销型企业网站模板
  • 网站服务器排名中国建筑工业出版社
  • 免费网站为何收录比较慢百度竞价关键词出价技巧
  • 做有网被视频网站吗网页游戏公益服平台
  • 网站图片代码怎么做青岛网站建设制作推广
  • 沈阳医疗网站制作外贸出口网
  • 呼和浩特制作网站做网站服务器价格多少合适
  • 上海专业网站制作设计公司哪家好可做生物试卷的网站
  • 做一款什么网站赚钱自己做视频网站 在优酷推广
  • 网站开发 软件网站制作模板图片
  • 深圳网站页面设计公司深圳高端婚介公司
  • 消费返利系统网站建设电商模板网站
  • 中山网站建设解决方案佛山网络发言人平台
  • 国外网站怎么进入怎么修改wordpress 后台登陆密码
  • 简单手机网站模板企业网站在百度搜索不到
  • 长沙百度网站建设凡科轻站
  • 深圳做英文网站的公司wordpress pagination
  • 一个空间可以做几个网站吗找竞价托管公司
  • 如何找到网站管理员宁波平面设计公司
  • 刷赞网站推广qq免费企业网站备案号密码忘记
  • 合肥网站关键词推广成都百度网站优化
  • 在哪找可以做网站的江苏网站关键词优化优化
  • 高校信息公开网站建设上海网络推广培训机构