原型模式有两种状态 浅拷贝与深拷贝

浅拷贝:创建一个新的对象,但是内部引用数据类型 指向的还是通一个地址,基本数据类型没有地址,类似于快捷方式

深拷贝:创建一个新的对象 ,引用数据类型指向的地址也是全新的 类似于副本

浅拷贝:

package com.qf.prototypedemo.simpleclone;//实现 Cloneable 接口
/*
浅拷贝 : 创建一个新对象 非基本类型地址是一样的
三个角色:抽象原型类 规定必须实现的clone方法
具体原型类:实现抽象原型类 他是可被复制的对象
访问类: 使用 具体原型类 中的clone 去复制对象*/public class Realizetype implements Cloneable {private String name;private int id;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Realizetype() {System.out.println("具体原型对象创建完成");}@Overrideprotected Realizetype clone() throws CloneNotSupportedException {System.out.println("具体原型复制成功");return (Realizetype) super.clone();}
}package com.qf.prototypedemo.simpleclone;public class PrototypeTest {public static void main(String[] args) throws CloneNotSupportedException {Realizetype r1 = new Realizetype();//复制对象 ->对象是不一样的 其中的 引用类型 是指向一个地址空间的Realizetype r2 = r1.clone();// 设置 具体值 去验证 基本数据类型与 引用数据类型 在浅拷贝上是不一样的r1.setName("zhangsan");r1.setId(1);System.out.println(r1.getName());System.out.println(r2.getName());System.out.println(r1.getId());System.out.println(r2.getId());}
}

深拷贝:

package com.qf.prototypedemo.deepclone;import com.qf.prototypedemo.deepclone.pojo.Student;import java.io.*;//深克隆测试  进行深克隆需要使用对象流
public class DeepCloneTest {
//    public static void main(String[] args) throws CloneNotSupportedException {
//        //声明一个具体原型类
//        Citation c1 = new Citation();
//        Student s1 = new Student("张三", "二七");
//
//        //将原型类的学生属性设置对象
//        c1.setStu(s1);
//
//        //克隆 奖状类
//        Citation c2 = (Citation) c1.clone();
//        Student s2 = c2.getStu();
//        s2.setName("李四");
判断stu对象和stu1对象是否是同一个对象
//        System.out.println("stu和stu1是同一个对象?" + (s1 == s2));
//
//        c1.show();
//        c2.show();
//
//    }//深克隆public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {//声明一个具体原型类Citation c1 = new Citation();Student stu1 = new Student("张三", "二七");c1.setStu(stu1);//创建对象输出流 写入磁盘ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("E:\\Temp\\work\\beepclone.txt"));//将对象写入磁盘out.writeObject(c1);out.close();//创建对象输入流 写入程序ObjectInputStream into = new ObjectInputStream(new FileInputStream("E:\\Temp\\work\\beepclone.txt"));//读取对象Citation c2 = (Citation) into.readObject();//获取c2 奖状对象 所属的学生类对象Student stu2 = c2.getStu();stu2.setName("李四");System.out.println("两个对象是否是 一个对象" + (stu1 == stu2));c1.show();c2.show();}
}package com.qf.prototypedemo.deepclone;//深拷贝 奖状类import com.qf.prototypedemo.deepclone.pojo.Student;import java.io.Serializable;/*** 拷贝一个新对象 ,对象内所有数据 都是另一份 相当于副本*/
public class Citation implements Cloneable, Serializable {//学生类属性private Student stu;public Student getStu() {return stu;}public void setStu(Student stu) {this.stu = stu;}//show 方法void show() {System.out.println(stu.getName() + "同学:在2020学年第一学期中表现优秀,被评为三好学生。特发此状!");}//重写拷贝方法@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}

设计模式-原型模式 clone相关推荐

  1. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  2. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  3. 设计模式 原型模式_原型设计模式:创建另一个小车

    设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...

  4. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  5. C++设计模式——原型模式(Prototype Pattern)

    C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...

  6. 第六章 Caché 设计模式 原型模式

    文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...

  7. 设计模式---原型模式(Prototype Pattern)

    在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...

  8. 精通python设计模式-浅谈Python设计模式 - 原型模式

    声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...

  9. [设计模式]原型模式

    简介 原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 结构 图-原型模式结构图 Pr ...

最新文章

  1. iOS开发 最近开发了蓝牙模块,在此记录总结一下
  2. spring+mybatis事务的readonly属性无效
  3. DropdownList绑定的两种方法
  4. 自定义的GridView控件源代码
  5. net user命令详解
  6. mysql case break_按月转移日志表中日志时,mysql总是报‘MySQL server has gone away’这样的错!...
  7. 量子计算机到底神在哪里说明文,“九章”量子计算机到底有多神!
  8. c++可视化开发_页面可视化配置搭建工具技术要点
  9. VTK:绘制带有rgb的单元格颜色用法实战
  10. C语言写300k文件大概多少行,为什么 DELPHI 编译出的程序一般的来说至少都有300k呢?...
  11. 重提URL Rewrite(4):不同级别URL Rewrite的一些细节与特点
  12. android实现Materia Design风格APP(六):结束,实现APP
  13. 毫秒级超低延时直播产品实测(PRTC直播/webRTC直播)
  14. switch 大气层双系统 进入破解系统 及安装nsp nsz 格式教程
  15. EZchip花1.3亿美元买Tilera然后以8亿美元把自己与Tilera一起卖掉
  16. 计算机毕业设计java+ssm酒店管理系统(源码+系统+mysql数据库+Lw文档)
  17. 2022年二级建造师报名需要准备什么
  18. TNFBA治疗强柱达52周时脊柱新骨形成与慢性炎症损害和脂肪变性有关
  19. 微信小程序数组的合成方式
  20. 2018年终总结——凡是过往,皆为序章

热门文章

  1. 学tlc和JAVA,SIMULINK_S-Function_TLC_RTW基础(给初学者)
  2. 鲸探发布点评:9月20日发售FPX戒指、中山大学号科考船数字藏品
  3. 全靠这4个自媒体素材工具,1天剪辑10个视频,昨天收益500多
  4. 关键字替换的工具类实现
  5. jpg、png格式的图片转换为eps格式
  6. 21美亚个人赛,工具用火眼和取证大师
  7. 关于Anaconda打不开/闪退问题
  8. crmeb多商户二开文档
  9. 怎么把aac转化为mp3?
  10. android 短信 ios9,短信验证码:iOS和安卓端系统的设计方案差异和最优选择