OOP(Java)-生成对象的最佳方法

时间:2018-10-11 12:15:16

标签: java oop

如果要生成具有随机值的简单对象的Java实例。

例如,对于类:

class Entity {
    int id;
}

我想添加generate函数,该函数使用id的随机值初始化一个新实例。

最好的OOP方法是什么?我考虑了两个选项:

  1. 要在Entity类中创建静态方法:

    class Entity {
      int id;
      public static Entity generate(){
          Entity e = new Entity ();
          int rand = MathUtil.generateRandomInt(); // method in util class 
                     in the project.
          e.setId(rand )
          return e;
     }
    }
    
  2. 要创建EntityGenerator类:

     class EntityGenerator{
         public Entity generate(){
          Entity e = new Entity ();
          int rand = MathUtil.generateRandomInt(); // method in util class 
                     in the project.
          e.setId(rand);
          return e;
        }
    
    }
    

我在犹豫什么是更好的选择。

3 个答案:

答案 0 :(得分:2)

您只需要创建类的对象。它会自动填充随机数。

import java.util.Random;

public class Entity {

  private int id;

  public Entity() {
    id = new Random().nextInt(100000);//set the upper limit, it generated numbers between 0 and 99999
  }

  public int getId() {
    return id;
  }

  public Entity setId(int id) {
    this.id = id;
    return this;
  }

}

或者您可以在类中创建静态Random()对象。

public class Entity {
  private static Random r = new Random();
  private int id;

  public Entity() {
    id = r.nextInt(100000);//set the upper limit, it generated numbers between 0 and 99999
  }

  public int getId() {
    return id;
  }

  public Entity setId(int id) {
    this.id = id;
    return this;
  }

}

希望它会有所帮助。

答案 1 :(得分:1)

选项1最好遵循“对Java joshua bloch有效”。您可以在第一章“静态工厂”中找到它。您也不需要新的EntityGenerator来创建实体,这样可以节省内存。

class Entity {
  int id;
  public static Entity generate(){
      Entity e = new Entity ();
      int rand = MathUtil.generateRandomInt(); // method in util class 
                 in the project.
      e.setId(rand )
      return e;
 }
}

答案 2 :(得分:0)

选项2: 分隔的EntityGenerator类(实际上是一个Factory)也适用,但也有一些限制

  • public Entity generate()将是静态的public static Entity generate()
  • 或者您必须将EntityGenerator作为单例使用(即,将仅创建一个实例并在程序中使用它。)

差异只会是哪种模式更适合您 (我假设您可能有多个“实体”类。)

  • 每个类中都有自己的静态generate方法
  • 集中工厂以在特殊的EntityGenerator类中创建所有种类的工厂。