原型模式
- 【干货分享】Java原型模式全解析,看完秒懂!🔥
- 什么是原型模式?🤔
- 如何实现原型模式?💻
- 浅拷贝vs深拷贝,傻傻分不清?🧐
- 浅拷贝(默认的clone方式)
- 深拷贝(进阶版)
- 还有一招绝杀 - 序列化实现深拷贝!💯
- 原型模式有什么优缺点?📊
- 优点👍
- 缺点👎
- 什么时候用原型模式?🕒
- 实际应用在哪里?🌟
【干货分享】Java原型模式全解析,看完秒懂!🔥
大家好呀!今天给大家带来Java设计模式系列的又一篇干货 - 原型模式!这个模式超级实用但很多小伙伴都不太了解,赶紧学起来吧!👇
什么是原型模式?🤔
简单来说,原型模式就是"复制"而不是"新建"!它通过复制一个已有对象来创建新对象,而不是通过new关键字实例化。
当你需要创建大量相似对象时,这个模式简直是救星!不仅提高性能,还能简化创建过程,太赞了!✨
如何实现原型模式?💻
Java中实现超简单,只需要:
- 实现Cloneable接口
- 重写clone()方法
看代码:
public class Prototype implements Cloneable {private String name;public Prototype(String name) {this.name = name;}// getter和setter省略...@Overridepublic Prototype clone() {try {return (Prototype) super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();return null;}}
}
使用起来也超简单:
Prototype original = new Prototype("原始对象");
Prototype copy = original.clone();// 修改克隆对象不会影响原型对象
copy.setName("修改后的克隆对象");
浅拷贝vs深拷贝,傻傻分不清?🧐
这个必须说清楚!很多面试都会问到!
浅拷贝(默认的clone方式)
只复制基本类型和引用,但引用的对象本身不会被复制。
❌ 缺点:修改克隆对象中的引用类型,原型对象也会受影响!
深拷贝(进阶版)
不仅复制对象本身,还递归复制所有引用类型的成员变量。
✅ 优点:完全独立的两个对象,互不影响!
深拷贝实现方式:
@Override
public DeepCopy clone() {try {DeepCopy clone = (DeepCopy) super.clone();// 深拷贝引用类型clone.address = this.address.clone();return clone;} catch (CloneNotSupportedException e) {return null;}
}
还有一招绝杀 - 序列化实现深拷贝!💯
这个方法超级实用,尤其是对象结构复杂的时候:
public SerializableDeepCopy deepCopy() {try {// 写入流ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(this);// 读出来ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());ObjectInputStream ois = new ObjectInputStream(bis);return (SerializableDeepCopy) ois.readObject();} catch (Exception e) {return null;}
}
原型模式有什么优缺点?📊
优点👍
- 性能提升:复制比new创建快多了
- 简化创建:不用管对象创建的细节
- 可以保存对象状态:运行时想复制就复制
缺点👎
- 循环引用的对象克隆起来好麻烦
- 深拷贝实现有点复杂
- 必须实现接口和方法
什么时候用原型模式?🕒
- 创建对象成本高,但对象之间差异小
- 不想创建一堆工厂类
- 类初始化需要消耗超多资源
实际应用在哪里?🌟
- Java的Object克隆
- Spring框架的Bean复制
- 各种配置信息的复制
学会了原型模式,你的代码效率立刻提升一个档次!是不是超级实用?快点赞+收藏吧!❤️