近期在javaeye看到一位兄弟写的java原型模式之理解。然后,自己就写了个demo,但是在使用colone时,好像出现了些问题??
定义如下几个类:
public class BtripApplication implements Cloneable{
private int a;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public BtripApplication clone() throws CloneNotSupportedException {
return (BtripApplication)super.clone();
}
}
------------------------------------------------------------------------------------------------------------------------
public class BtripRevision implements Cloneable {
private BtripApplication btripApplication;
public BtripRevision(BtripApplication btripApplication){
this.btripApplication = btripApplication;
}
public BtripApplication getBtripApplication() {
return btripApplication;
}
public void setBtripApplication(BtripApplication btripApplication) {
this.btripApplication = btripApplication;
}
public BtripRevision clone() throws CloneNotSupportedException {
return (BtripRevision)super.clone();
}
}
---------------------------------------------------------------------------------------------------------------------
public class TestBtripApplicationRevision {
public static void main(String args[]) throws CloneNotSupportedException{
BtripApplication b1 = new BtripApplication();
b1.setA(1);
BtripRevision b2 = new BtripRevision(b1);
BtripRevision b3 = b2.clone();
//b3.getBtripApplication().setA(3);
b1.setA(3);
System.out.println("b2="+b2.getBtripApplication().getA());
System.out.println("b3="+b3.getBtripApplication().getA());
System.out.println("b2="+b2+"--------b3="+b3);
}
}
输出的结果为:b2=3
b3=3
为什么结果不是b2=1,b3=3呢???
分享到:
相关推荐
总结起来,Java原型模式通过`Cloneable`接口和`clone()`方法提供了一种快速创建对象的方式,尤其适用于那些创建过程复杂或需要频繁复制对象的情况。然而,使用时要注意深拷贝和浅拷贝的区别,并根据实际情况处理对象...
在Java中,原型模式通过实现Cloneable接口和覆盖clone()方法来复制对象,避免了使用构造函数进行深度复制的复杂性。接下来我们将深入探讨Java原型模式的核心概念、实现方式以及实际应用。 ### 核心概念 1. **原型...
在Java中实现原型模式,首先需要让原型类实现`Cloneable`接口,并重写`clone()`方法。以下是一个简单的示例: ```java public class Prototype implements Cloneable { private String property; public ...
【Java原型模式详解】 原型模式(Prototype Pattern)是一种创建型设计模式,它的主要目标是通过复制现有的对象来创建新对象,以减少重复的构造过程,提高性能。在Java中,原型模式通常涉及到对象的克隆操作,即...
在Java、C#等面向对象的语言中,原型模式通过实现`Cloneable`接口或使用序列化机制来实现对象的复制。在这个"原型模式实践代码"中,我们可以预期看到如何在实际编程中应用这一模式。 在Java中,`Cloneable`接口是...
原型模式是设计模式中的一种,它是Java 23种经典设计模式之一,主要用来提高对象创建的效率。在原型模式中,我们通过复制或克隆一个已经存在的对象来创建新的对象,而不是通过构造函数来创建。这种方法尤其适用于当...
### Java设计模式之原型模式深度解析 #### 模式动机 在面向对象编程的世界里,对象的创建往往伴随着复杂的逻辑处理。特别是在某些场景下,对象的构造过程可能涉及大量资源的消耗,例如数据库连接、文件读写等。在...
原型模式是 Java 设计模式之一,它用于创建对象时,指定创建对象的类型,并通过拷贝这些原型创建新的对象。该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。 原型模式的...
**Java设计模式之原型模式详解** 原型模式(Prototype Pattern)是设计模式中的一种结构型模式,主要用于快速创建对象。在Java中,它基于对象克隆的概念,允许我们复制已有对象而不必再次创建新实例,从而降低系统...
java设计模式【之】原型模式、深拷贝与浅拷贝【源码】【场景:克隆羊】 * 原型模式(Prototype) * 实现方式: * 需要被克隆的 class类, 重写Object中的clone()方法,并实现Cloneable接口(否则报错 ...
这个抽象类声明了一个`clone()`方法,它是原型模式的核心,用于创建与原对象相同的新对象。由于Java的`clone()`方法是受保护的,所以我们需要在子类中重写它,并将其公开。 然后,创建一个具体的原型类...
在Java中,实现原型模式主要有两种方式:浅复制和深复制。浅复制只是复制对象本身,如果对象中包含引用类型的成员变量,那么只复制引用,不复制引用的对象。深复制则是不仅复制对象本身,还递归复制对象中的所有引用...
在Java中,原型模式通常通过实现`Cloneable`接口来实现。`Cloneable`接口表明一个对象可以被复制。当一个类实现了这个接口,我们就可以调用`Object`类中的`clone()`方法来复制该对象。但是,需要注意的是,`clone()`...
在Java中,原型模式通常通过实现一个原型接口或抽象类,并在具体类中提供克隆方法来实现。Java中有一个内置的Cloneable接口和Object类的clone()方法,它们可以被用来实现对象的克隆。但是,直接使用clone()方法需要...
在Java、C#等面向对象语言中,原型模式通常依赖于语言提供的克隆功能。例如,在Java中,一个类如果要实现Cloneable接口并重写`clone()`方法,就可以成为可被克隆的对象。下面我们将深入探讨原型模式的实现和应用场景...
- 在Java中,实现原型模式可以通过实现`Cloneable`接口并重写`Object`类的`clone()`方法来完成。但是需要注意的是,`clone()`方法默认是浅拷贝,若需要实现深拷贝,需要自定义实现。 - 在Python等语言中,可以直接...
原型模式通过复制一个已经存在的实例来创建新的实例,以避免重复的初始化操作。在JDK中的应用包括: - java.lang.Object#clone(),创建并返回此对象的副本。 e) 单例模式(Singleton) 单例模式保证一个类只有一...
在Java中,我们通常通过实现`Cloneable`接口和覆盖`Object`类中的`clone()`方法来实现原型模式。 1. **实现Cloneable接口**: 一个类如果想要支持克隆,必须实现`Cloneable`接口。这是一个标记接口,不包含任何...