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



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

例如,对于类:

class Entity {
int id;
}

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

什么是最好的 OOP 方法?我想到了 2 个选项:

  1. 在实体类中创建静态方法:

    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. 创建实体生成器类:

    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;
    }
    }
    

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

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

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 最好遵循"在 Java 中有效 Joshua Bloch"。您可以在第一章"静态工厂"中找到它。您也不需要新的实体生成器来创建实体,因此它将节省内存。

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类(实际上它是一个工厂(也适用,但只有一些限制

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

区别将只在于哪种模式更适合您 (我假设您可能有多个"实体"类。

  • 在每个类中都有静态generate方法,用于自己的
  • 方法
  • 集中工厂在特殊EntityGenerator类中创建各种它们。

最新更新