首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现原型模式?

如何实现原型模式?
EN

Stack Overflow用户
提问于 2010-08-21 00:48:57
回答 4查看 1.2K关注 0票数 5

prototype模式的目标是通过降低创建成本来克隆对象。下面是一个示例:

代码语言:javascript
复制
class Complex {
    int[] nums = {1,2,3,4,5};
    public Complex clone() {
        return new Complex();//this line create a new object, so is it violate the objective             of prototype ?//
    }
}

class Test2 {
   Complex c1 = new Complex();
   Complex makeCopy() {
      return (Complex)c1.clone();// Is it actually create a new object ? based on the clone method in Complex class? //
   }
   public static void main(String[] args) {
       Test2 tp = new Test2();
       Complex c2 = tp.makeCopy();
   }
}

我想这是为深度复制准备的。那么,有人能帮我解决这个问题吗?

EN

回答 4

Stack Overflow用户

发布于 2010-08-21 01:00:21

首先,要使其正常工作,您的复杂类需要实现Cloneable标记接口,以向Object.clone()方法表明,该方法为该类的实例创建字段对字段的副本是合法的。然后,您需要覆盖Object.clone()方法来指定复制行为:

代码语言:javascript
复制
public Complex clone(){
    Complex clone = (Complex)super.clone();
    clone.nums = this.nums;
    return clone;
}
票数 1
EN

Stack Overflow用户

发布于 2010-08-21 01:31:47

我不认为给出的例子是按照Prototype模式实现的。

我看到的错误是:

使用重写的克隆方法中的“implemented.

  • new ()”构造函数创建的新复杂标记接口不是新的
  1. 实例。事实并非如此。我在这里的意思是,在prototype模式中,我们应该复制源代码,进行一些更改,并根据需求使用克隆。但不创建新实例。通过克隆可以避免创建实例的成本,但如果我们覆盖克隆方法并自己创建实例,您实际上是在增加它的成本。

理解Prototype模式的一些链接:

http://www.javabeat.net/tips/34-using-the-prototype-pattern-to-clone-objects.html

http://www.allapplabs.com/java_design_patterns/prototype_pattern.htm

票数 0
EN

Stack Overflow用户

发布于 2010-08-21 01:32:35

克隆方法的java实现不会调用类构造函数。它会将当前实例占用的内存复制到内存中的另一个位置。

这样才能真正降低创建新对象的成本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3533020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档