Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 此代码是否以任何方式遵循或违反原型模式?_Java_Design Patterns_Prototype Pattern - Fatal编程技术网

Java 此代码是否以任何方式遵循或违反原型模式?

Java 此代码是否以任何方式遵循或违反原型模式?,java,design-patterns,prototype-pattern,Java,Design Patterns,Prototype Pattern,我没有获取克隆对象并修改属性,而是先修改对象的属性,然后返回其克隆。规则方面和性能方面有什么区别吗?另外,关于设计的任何其他建议都会很好。谢谢 public class Category implements Cloneable { private int id; private String title; private int totalGames; // getters and setters public Category clone() { try {

我没有获取克隆对象并修改属性,而是先修改对象的属性,然后返回其克隆。规则方面和性能方面有什么区别吗?另外,关于设计的任何其他建议都会很好。谢谢

public class Category implements Cloneable {

  private int id;
  private String title;
  private int totalGames;

  // getters and setters
  public Category clone() {
    try {
      return (Category)super.clone();
    } catch(CloneNotSupportedException ex) {
      return null;
    }
  }
}


public class CategoryCache {

  private static Category category = new Category(0, null, 0);

  private CategoryCache() {

  }

  public static Category getCategory(int id, String title, int totalGames) {
    category.setId(id);
    category.setTitle(title);
    category.setTotalGames(totalGames);
    return category;
  }
}


while (<100 times>) {            
  Category category = CategoryCache.getCategory(<var1>, <var2>, <var3>).clone();
  arlCategory.add(category); // add to arraylist
}
公共类类别实现可克隆{
私有int-id;
私有字符串标题;
私人游戏;
//接球手和接球手
公共类别克隆(){
试一试{
返回(类别)super.clone();
}捕获(CloneNotSupportedException ex){
返回null;
}
}
}
公共类类别缓存{
私有静态类别=新类别(0,空,0);
私有CategoryCache(){
}
公共静态类别getCategory(整数id、字符串标题、整数totalGames){
类别.setId(id);
类别.标题(标题);
类别:setTotalGames(totalGames);
退货类别;
}
}
而{
Category Category=CategoryCache.getCategory(,).clone();
arlcontegory.add(category);//添加到arraylist
}

事实上,原型不仅仅是一种模式,它还是提高Java性能的一种变通方法。我们需要了解的基本情况是,每当我们认为直接创作成本高昂时,“我们需要原型”,因此我们使用的是现有作品的克隆,而不是新作品

因此,我们主要将创建(new())替换为someExistingObject.clone()

因此,无论您是在克隆之前还是之后更改属性,您都已经实现了最终目标。所以结果是一样的


唯一不同的是,用于克隆目的的对象(您反复使用的对象)很可能只是用于克隆过程的专用对象,不能执行任何其他工作。

事实上,Prototype不仅仅是一种模式,它是提高Java性能的一种变通方法。我们需要了解的基本情况是,每当我们认为直接创作成本高昂时,“我们需要原型”,因此我们使用的是现有作品的克隆,而不是新作品

因此,我们主要将创建(new())替换为someExistingObject.clone()

因此,无论您是在克隆之前还是之后更改属性,您都已经实现了最终目标。所以结果是一样的

唯一不同的是,用于克隆目的的对象(您反复使用的对象)很可能只是用于克隆过程的专用对象,无法执行任何其他工作。

这是一个问题,因为这是一个问题