网站首页 > java教程 正文
原型模式
原型模式虽然是创建型的模式,但是与工厂模式没有关系,该模式的思想就是将一根对象作为原型,对其进行复制、克隆,产生一根和原对象类似的新对象。在java中,复制对象是通过clone()实现的,首先创建一个原型类。
public class Prototype implements Cloneable {
public Object clone() throws CloneNotSupportedException {
Prototype proto = (Prototype) super.clone();
return proto;
}
}
一个原型类,只需要实现了Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称,Cloneable接口是一个标记接口(空接口),可以任意定义实现类的方法名,重点是需要调用父类(Object)中的clone方法,Object类中的clone的对象复制,属于对象的浅复制。
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还是引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
public class Prototype implements Cloneable, Serializable {
private static final long serialVersionUID = -2753377182918295778L;
private String name;
private int count;
private Object object;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public Object getObject() {
return object;
}
public void setObject(Object object) {
this.object = object;
}
public Prototype clone() throws CloneNotSupportedException {
Prototype proto = (Prototype) super.clone();
return proto;
}
public Prototype deepClone() throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return (Prototype)ois.readObject();
}
}
要实现深复制,需要采用流的方式读入当前对象的二进制输入,再写入二进制数据对应的对象。
猜你喜欢
- 2025-07-28 彻底搞懂Spring依赖注入(一)Bean实例创建过程
- 2025-07-28 一文深入了解23种设计模式与六大原则的细枝末节 内含视频和文档
- 2025-07-28 快速上手Java设计模式之简介(java中的设计模式及使用场景)
- 2025-07-28 《深入理解javascript原型和闭包系列》 知识点整理
- 2025-07-28 5 分钟搭建 Node.js 微服务原型(node.js创建服务)
- 2025-07-28 JYM 设计模式系列- 责任链模式,装饰模式,让你的代码更优雅!
- 2025-07-28 一文搞懂JavaScript原型及原型链(附代码)
- 2025-07-28 JavaScript 原型链、prototype、__proto__详解
- 2025-07-28 Java设计模式面试题及答案整理(2025最新版)
- 2025-07-28 Java 面试题:Spring 配置 Bean 实例化有哪些方式?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)