1.Object clone 就是复制一个对象的复本,在Factory模式中比较常用。对象要实现Clone的功能,就必须implements Clonable interface, 事实上,这是一个没有任何method的interface。对象的clone方法是Object类的方法,如果对象没有implements Clonable,就会throw CloneNotSupportedException.
protected native Object clone() throws CloneNotSupportedException;
2.一个Object可能有基本数据类型,如:int,long,float,double等,也会含有非基本数据类型如数组,collection,自定义对象等。如果被克隆得到的对象基本类型的值修改了,原对象的值不会改变.这种就是shadow clone.
3.如果你要改变一个非基本类型的值时,原对象的值却改变了,.比如一个数组,内存中只copy他的地址,而这个地址指向的值并没有copy,当clone时,两个地址指向了一个值,这样一旦这个值改变了,原来的值当然也变了,因为他们共用一个值.,这就必须得用deep clone。重载clone方法,对于非原始类型的对象,手动去作clone,这样比较复杂,公用性不高,对于每个类都要去写一套。
4.序列化/反序列化方式实现deepclone
如果source对象实现了Serializable接口,就可用这种方式来做deepclone,一段示例代码
public Object deepClone(Object src) {
Object o = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(src);
oos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(baos
.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
o = ois.readObject();
ois.close();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return o;
}
分享到:
相关推荐
在本项目中,我们主要探讨的是如何使用Java编程语言来创建一个备忘录应用程序。JavaScript,通常用于前端开发,但这里我们将看到它如何与后端技术结合,构建一个功能丰富的应用。RocketSeat是一个知名的在线教育平台...
Java中提供了`clone()`方法支持浅复制。 6. **组合模式**:允许你将对象组合成树形结构来表现“整体/部分”层次结构。在Java UI组件树中广泛应用。 7. **装饰器模式**:动态地给一个对象添加一些额外的职责。Java...
Java中的`Cloneable`接口和`Object`类的`clone()`方法支持原型模式的实现。 6. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。在Java中,可以使用类适配器或接口适配器,使不兼容的接口能够协同工作...
Java中可以利用`java.lang.Cloneable`接口和`clone()`方法实现。 6. **适配器模式(Adapter)**:使两个不兼容的接口能够协同工作。在Java中,可以使用类适配器或对象适配器模式,通过继承或组合实现。 7. **桥接...
Java中,可以利用`java.lang.Cloneable`接口和`clone()`方法。 2. **结构型设计模式** - **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在Java中,可以使用动态代理(`java.lang.reflect.Proxy`)...
Java中,可以利用`java.lang.Cloneable`接口和`clone()`方法实现。 6. **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。在Java中,可以通过实现目标接口或继承目标类来实现。 7. **装饰器...
Java的`Object.clone()`方法即为原型模式的体现。 6. **组合模式 (Composite)**:将对象组合成树形结构以表示“部分-整体”的层次结构。Java的`java.awt.Container`和`java.awt.Component`类就使用了组合模式。 7....
Java提供了`clone()`方法支持浅复制,也可以通过序列化实现深复制。 6. **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。适配器让原本不兼容的类可以协同工作。在Java中,可以通过继承或...
- **JAVA实现**:实现`Cloneable`接口并通过`clone()`方法复制对象。 **(3)建造者模式(Builder)** - **定义**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **应用场景**...
24.4.1 clone方式的备忘录 24.4.2 多状态的备忘录模式 24.4.3 多备份的备忘录 24.4.4 封装得更好一点 24.5 最佳实践 第25章 访问者模式 25.1 员工的隐私何在? 25.2 访问者模式的定义 25.3 访问者模式的应用 25.3.1 ...
Java中提供了`java.lang.Cloneable`接口和`clone()`方法来支持原型模式。 6. 组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。Java中的`List`, `Set`, `Map`等集合类都是组合模式的应用。 7. ...
Java中的`Object.clone()`方法可以实现浅拷贝。 2. **结构型设计模式**: - **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在Java中,可以通过动态代理实现,如`java.lang.reflect.Proxy`和`java....
Java中可以实现Cloneable接口并覆写clone()方法来实现原型模式。 6. **适配器模式** (Adapter):将一个类的接口转换成客户希望的另一个接口。在Java中,可以使用类适配器或对象适配器模式,通过继承或组合来实现...
Java中的`clone()`方法或序列化机制可以实现原型模式。 5. **适配器模式**:允许两个不兼容的接口协同工作。在Java中,可以使用类适配器或对象适配器来实现这种模式。 6. **装饰器模式**:动态地给一个对象添加...
Java中的`clone()`方法可用于实现原型模式。 6. **组合模式**:将对象组合成树形结构以表示“部分-整体”的层次结构。Java中,通过接口统一处理叶子节点和树枝节点。 7. **装饰器模式**:动态地给一个对象添加一些...
5. **原型模式**:通过复制已有对象来创建新对象,Java中可以利用`java.lang.Cloneable`接口和`clone()`方法实现。 6. **适配器模式**:将一个类的接口转换成客户期望的另一个接口。在Java中,可以使用类适配器或...
Java中的`clone()`方法或序列化机制可以实现原型模式。 6. **适配器模式**:将不兼容的接口转换为用户期望的接口,使得原本因接口不兼容而不能一起工作的类可以协同工作。适配器模式在Java中广泛应用于组件之间的...