如果我想生成具有随机值的简单对象的Java实例。
例如,对于类:
class Entity {
int id;
}
我想添加生成函数,该函数使用 id 的随机值初始化一个新实例。
什么是最好的 OOP 方法?我想到了 2 个选项:
在实体类中创建静态方法:
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; } }
创建实体生成器类:
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
类中创建各种它们。