rth*_*sen 5 java oop encapsulation
我们以这堂课为例:
public class Student{
private String name;
private String id;
public Student(String name, String id){
this.name = name;
this.id = id;
}
... getters and setters for both fields
Run Code Online (Sandbox Code Playgroud)
并将其与此进行比较:
public class Student{
public final String name;
public final String id;
public Student(String name, String id){
this.name = name;
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为不需要访问者.
这会被认为是糟糕的OO设计吗?
这是一个有问题的问题.
不幸的是,好(或坏)设计100%取决于它的使用方式.
根据经验,最好将成员变量保持为私有,这样Object模型就可以控制它们的访问.这意味着第一种方法更好.
但
如果价值观永远不变,重点是什么?如果他们永远不会被使用,为什么还要编写setter 呢?
那么,哪一个更好?正如我上面提到的,这取决于你为此做了什么.如果它是为了课程的作业,我会选择第一个.你的老师会更喜欢这样,因为它更像是"教科书".
所以,如果这是一个个人项目或者你可以利用未来版本的工作,我会在两者之间进行交叉:
public class Student{
private final String name;
private final String id;
public Student(String name, String id){
this.name = name;
this.id = id;
}
... getters ONLY for both fields
Run Code Online (Sandbox Code Playgroud)
这种方法是安全的,因为成员字段是私有的,并且没有未使用方法的"代码味道".这也是相当可扩展的,因为如果您的需求发生变化并且您需要修改字段,则可以非常轻松地添加setter.
| 归档时间: |
|
| 查看次数: |
328 次 |
| 最近记录: |