原型模式中的深克隆和浅克隆
Posted 前进道路上的程序猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原型模式中的深克隆和浅克隆相关的知识,希望对你有一定的参考价值。
前言
原型模式是指原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
在原型模式中,我们涉及到浅克隆和深克隆这两个概念,浅克隆中引用对象仍然指向原来的对象,深克隆则指向新的对象,下面我们就用案例来解释
案例
我们新建两个类,课程类和视频类,每个课程都有相应的视频
Video :
public class Video implements Serializable
private String videoName;
Course :
public class Course implements Cloneable, Serializable
public Date day;
public Video video;
public Course()
this.day = new Date();
this.video = new Video();
protected Object clone() throws CloneNotSupportedException
return this.deepClone();
public Object deepClone()
try
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
Course copy = (Course)ois.readObject();
copy.day = new Date();
return copy;
catch (Exception e)
e.printStackTrace();
return null;
public Course shallowClone(Course target)
Course course = new Course();
course.video = target.video;
course.day = new Date();
return course;
视频类Video 有名字属性videoName,并且实现Serializable 接口
课程类Course 有日期属性day和视频类属性Video ,并且实现Cloneable和Serializable 接口
深克隆中使用序列化与反序列化,浅克隆则是直接用目标对象复制属性到新对象
测试
CloneTest :
public class CloneTest
public static void main(String[] args)
Course course = new Course();
try
Course clone = (Course)course.clone();
System.out.println("深克隆"+(course.video == clone.video));
catch (Exception e)
e.printStackTrace();
Course q = new Course();
Course n = q.shallowClone(q);
System.out.println("浅克隆"+(q.video == n.video));
以上是关于原型模式中的深克隆和浅克隆的主要内容,如果未能解决你的问题,请参考以下文章