对于项目,我必须创建代表不同类型用户的对象。所有类型都是从超类User继承的子类。在示例中,我们有一个学生,一名老师和一名协调员。每个类对某些方法都有不同的实现。为了知道我们正在处理的用户类型,从数据库中提取了一条记录,包括一个用户角色。根据角色,将创建不同类型的User子类。目前,我正在使用switch语句,如下所示。但是,由于它们都具有相同的构造函数,因此这将导致重复的代码。如何做到更优雅/更有效?
public void makeUserTypes() {
switch (idRole) {
case 0:
user = new Student(idUser, username, firstName, lastName);
break;
case 1:
user = new Teacher(idUser, username, firstName, lastName);
break;
case 2:
user = new Coordinator(idUser, username, firstName, lastName);
break;
}
}
带有开关或地图的功能界面怎么样?
public interface UserCtor<U> {
U create(String idUser, String username, String firstName, String lastName);
}
然后您可以执行此操作:
public void makeUserTypes() {
UserCtor<?> ctor = null;
switch (idRole) {
case 0:
ctor = Student::new;
break;
case 1:
ctor = Teacher::new;
break;
case 2:
ctor = Coordinator::new;
break;
}
user = ctor.create();
}
或者您可以使用地图:
private static Map<Integer, UserCtor<?>> ctorMap = Map.of(
0, Student::new,
1, Teacher::new,
2, Coordinator::new
);
public void makeUserTypes() {
user = ctorMap.get(idRole).create();
}