如果要生成具有随机值的简单对象的Java实例。
例如,对于类:
class Entity {
int id;
}
我想添加generate函数,该函数使用id的随机值初始化一个新实例。
最好的OOP方法是什么?我考虑了两个选项:
要在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;
}
}
要创建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;
}
}
我在犹豫什么是更好的选择。
答案 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
类中创建所有种类的工厂。