设计模式-原型模式 clone
原型模式有两种状态 浅拷贝与深拷贝
浅拷贝:创建一个新的对象,但是内部引用数据类型 指向的还是通一个地址,基本数据类型没有地址,类似于快捷方式
深拷贝:创建一个新的对象 ,引用数据类型指向的地址也是全新的 类似于副本
浅拷贝:
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相关推荐
- 设计模式 原型模式_创新设计模式:原型模式
设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...
- 设计模式 原型模式_设计模式:原型
设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...
- 设计模式 原型模式_原型设计模式:创建另一个小车
设计模式 原型模式 创建对象确实是一个耗时的过程,也是一件昂贵的事情. 因此,我们现在正冒险节省时间和金钱. 我们该怎么做? 克隆奇迹多莉 有人记得多莉吗? 是的,是绵羊,是第一个被克隆的哺乳动物. ...
- Java常用设计模式————原型模式(一)
介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...
- C++设计模式——原型模式(Prototype Pattern)
C++设计模式--原型模式(Prototype Pattern) 微信公众号:幼儿园的学霸 目录 文章目录 C++设计模式--原型模式(Prototype Pattern) 目录 定义 代码示例 普通 ...
- 第六章 Caché 设计模式 原型模式
文章目录 第六章 Caché 设计模式 原型模式 定义 使用场景 优点 结构图 描述 示例 初级写法 缺点 中级写法 缺点 高级写法 (浅复制) 浅复制 深复制 完整示例 简历类(复制类) 对象类(工 ...
- 设计模式---原型模式(Prototype Pattern)
在编程中有时候我们会发现,当我们需要一个实例,可是这个实例的创建过程十分复杂,在执行过程中 会消耗大量的时间,同时创建第一个实例和创建第二个时间的初始化信息并未改变.在此种情况下,直接New 一个实例 ...
- 精通python设计模式-浅谈Python设计模式 - 原型模式
声明,本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在<精通Python设计模式>中把设计模式分为三种类型: 创建型模式 ...
- [设计模式]原型模式
简介 原型模式 (Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式是一种对象创建型模式 (可参考 设计模式 创建型模式). 结构 图-原型模式结构图 Pr ...
最新文章
- iOS开发 最近开发了蓝牙模块,在此记录总结一下
- spring+mybatis事务的readonly属性无效
- DropdownList绑定的两种方法
- 自定义的GridView控件源代码
- net user命令详解
- mysql case break_按月转移日志表中日志时,mysql总是报‘MySQL server has gone away’这样的错!...
- 量子计算机到底神在哪里说明文,“九章”量子计算机到底有多神!
- c++可视化开发_页面可视化配置搭建工具技术要点
- VTK:绘制带有rgb的单元格颜色用法实战
- C语言写300k文件大概多少行,为什么 DELPHI 编译出的程序一般的来说至少都有300k呢?...
- 重提URL Rewrite(4):不同级别URL Rewrite的一些细节与特点
- android实现Materia Design风格APP(六):结束,实现APP
- 毫秒级超低延时直播产品实测(PRTC直播/webRTC直播)
- switch 大气层双系统 进入破解系统 及安装nsp nsz 格式教程
- EZchip花1.3亿美元买Tilera然后以8亿美元把自己与Tilera一起卖掉
- 计算机毕业设计java+ssm酒店管理系统(源码+系统+mysql数据库+Lw文档)
- 2022年二级建造师报名需要准备什么
- TNFBA治疗强柱达52周时脊柱新骨形成与慢性炎症损害和脂肪变性有关
- 微信小程序数组的合成方式
- 2018年终总结——凡是过往,皆为序章