我有一个bean类,比如教师,其状态为活动或非活动,并且每个状态都有一个标识符。为了实现这种行为,我的团队决定让一个Status bean同时包含 id 和 name 属性。
现在,假设我是使用教师 bean的服务的客户端。为了使用所述服务,我必须创建教师 bean:
Teacher teacher = new Teacher();
teacher.setName("Some name");
...
Status status = new Status();
status.setId(1);
...
teacher.setStatus(status);
问题是:如果我们将 Teacher.getStatus()实现为
,那将是一个好的OOP设计吗?Status status = null;
Status getStatus() {
if (status != null) {
return status;
} else {
return new Status();
}
}
因此,无论何时创建教师 bean,我都不会调用状态构造函数。像这样:
Teacher teacher = new Teacher();
teacher.setName("Some name");
teacher.getStatus().setId(1);
这会被视为不良做法吗?如果是这样,为什么?
答案 0 :(得分:2)
这种做法本身并不差,但在这个例子中似乎没有必要。如果您正在编写getter的对象在构造上有很多开销 - 例如,如果它被从数据库中拉出 - 这种一般方法是非常合理的。但是,有一件事你想解决。不要创建和返回新的Status对象,而是设置this.status=new Status()
并返回它。这样,如果您两次调用getStatus()
,就不会创建两个新的Status对象。
答案 1 :(得分:1)
我认为在函数中返回new是一个糟糕的设计。它会带给你内存泄漏。每次调用getStatus时,您都会创建一个新状态而不删除它。您可以轻松地使用相同的设计:
Teacher teacher = new Teacher();
teacher.setName("some name");
teacher.getStatus().setId(1);
public class Teacher{
private Status myStatus = new Status();
public void Teacher(){...}
public Status getStatus(){return myStatus;}
}
public class Status{
private int Id = 0;
public void Status(){...}
public void setId(int p_id){Id = p_id}
}