(1)Rename Method 函数改名
一个真正的编程高手,起名的水平至关重要。
(2)Add Parameter 添加参数
(3)Remove Parameter 移除参数
(4)Separate Query From Modifier 将查询函数和修改函数分离
某个函数即返回对象状态,又修改对象状态;建立两个不同的函数,其中一个负责查询,另一个负责修改。
范例:(Example) 有这样一个函数:一旦有人入侵安全系统,它会告诉我入侵者的名字,并发送一个警报。如果入侵者不止一个,也只发送一条警报: String foundMiscreant(String[] people){ for (int i = 0; i < people.length; i++) { if (people[i].equals ("Don")){ sendAlert(); return "Don"; } if (people[i].equals ("John")){ sendAlert(); return "John"; } } return ""; } 该函数被下列代码调用: void checkSecurity(String[] people) { String found = foundMiscreant(people); someLaterCode(found); }
-》
String foundPerson(String[] people){ for (int i = 0; i < people.length; i++) { if (people[i].equals ("Don")){ return "Don"; } if (people[i].equals ("John")){ return "John"; } } return ""; } void sendAlert(String[] people){ if (! foundPerson(people).equals("")) sendAlert(); } void checkSecurity(String[] people) { foundMiscreant(people); String found = foundPerson(people); someLaterCode(found); }
在同一个动作中完成检查和赋值。这是否和Separate Query from Modifier 互相矛盾呢? 我曾经和Doug Lea 讨论过这个问题,并得出结论:两者并不矛盾,但你需要做一 些额外工作。将查询动作和修改动作分开来仍然是很有价值的。但你需要保留第三个函数来同时做这两件事。这个「查询-修改」函数将调用各自独立的查询函数和 修改函数,并被声明为synchronized 时。