在重构时,可以有意识地查找表示“规则”和“约束”的代码片段,并将之进行抽取:
抽取的方式:
- 若“规则”与对象本身有关联或者说“规则”依赖于对象的内部数据,那就抽出私有方法;例子如下。
- 否则,该“规则”会适用于大多数情况,可考虑将之抽象成外部工具类的public方法,以提高复用率;如验证字符串是否为手机号。
</pre><pre name="code" class="html">public class Bookshelf {
private int capacity = 20;
private Collection<Book> content;
public void add(Book book) {
if (content.size() + 1 <= capacity) {
content.add(book);
} else {
throw new xxException("the bookshelf has reached its limit.");
}
}
}
</pre><p></p><p>if中的条件作为一个“约束”可以单独提取出来,更改后的代码如下:</p><p></p><pre name="code" class="java">public class Bookshelf {
private int capacity = 20;
private Collection<Book> content;
public void add(Book book) {
if (isSpaceAvailable()) {
content.add(book);
} else {
throw new xxException("the bookshelf has reached its limit.");
}
}
private boolean isSpaceAvailable() {
return content.size() + 1 <= capacity;
}
}