Setter and Getter in java
《重构》
“重构行为可以使责任的分配更为合理,使代码的维护更加轻松。 重构之后风格会迥异于过程化风格-后者也许是某些人习惯的风格。”
《重构》
“重构的节奏一般是测试,小修改,测试,小修改,测试,小修改..”
重构的定义
- 名次形式:
对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 - 动词形式:
使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。
重构不是所谓的”银弹” – 然而是一把”银钳子”
如果没有重构,程序的设计会逐渐腐败变质。 当人们只为短期目的或是在完全理解整体设计之前就贸然修改代码,程序将逐渐失去自己的结构。代码结构的流失是累积性的。
Setter & Getter
第八章《重新组织数据》
关于 “对象应该直接访问其中的数据,抑或应该通过访问函数来访问” 这一问题,争论的声音从来不曾停止。
间接访问变量
public class AccountDetails {
private String email;
public String getEmail() {
return email;
}
}public class AccountDetails {
private String email;
public String getEmail() {
return isBackUpEmail() ? null : email;
}
private isBackUpEmail() {
...
}
}间接访问变量的好处:
- 子类可以通过覆写一个函数而改变获取数据的途径
- 它还支持更灵活的数据管理方式,例如延迟初始化(意思是只有在用到时将它初始化)
public class AccountDetails {
private String email;
private BigData bigData;
public BigData getBigData() {
if(bigData) {
bigData = fetchFromDB();
}
return bigData;
}
..
}直接访问变量
public class AccountDetails {
public String email;
}直接访问变量的好处:
- 代码比较容易阅读。阅读代码的时候,你不需要停下来说:“啊,这只是个取值函数。”
究竟选择哪种方式呢?
面临选择时, 1. 按照团队中其他人的意愿来做。 2. 就我自己而言,我比较喜欢先使用直接访问方式,直到这种方式给我带来麻烦为止,此时我就会转而使用间接访问方式。重构给了我改变主意的自由。 Example: 如果你想访问超类中的一个字段,却又想在子类中将对这个变量的访问改为一个计算后的值,这就是最该使用SelfEncapsulateField(自封装字段)的时候。“字段自我封装”只是第一步。完成自我封装之后,你可以在子类中根据自己的需要随意覆写取值/设值函数。
一些其它
public class ApplicationInfo {
private UUID id;
private List<Txxxxt> txxxxts;
...
public void setTxxxxts(List<Txxxxt> txxxxts) {
this.txxxxts = txxxxts
}
}public class ApplicationInfo {
private UUID id;
private List<Txxxxt> txxxxts;
...
public List<Txxxxt> getTxxxxts() {
return txxxxts
}
}public class Txxxxt {
...
// 自己实现clone方法
public Object clone() {
..
}
}public class ApplicationInfo {
private UUID id;
private List<Txxxxt> txxxxts;
...
//伪代码
public void setTxxxxts(List<Txxxxt> txxxxts) {
txxxxts.foreach( t-> this.txxxxts.add(t.clone))
}
}Title Text
- Bullet One
- Bullet Two
- Bullet Three
Thanks
Setter and Getter in java
By sddtc
Setter and Getter in java
- 181