使用场景: 某些参数总是很自然地同时出现。
使用方法: 以一个对象取代这些参数。
//重构前
package 第十章;
import java.util.Date;
import java.util.Enumeration;
import java.util.Vector;
public class Account {
private Vector _entries = new Vector();
//此处的 开始 结束 日期总是成对出现,则可以将其替换为一个对象
double getFlowBetween(Date start,Date end){
double result = 0;
Enumeration e = _entries.elements();
if(e.hasMoreElements()){
Entry each = (Entry) e.nextElement();
//并且将比较的行为也可以移到新的对象中去
if(each.getDate().equals(start) || each.getDate().equals(end) || each.getDate().after(start) && each.getDate().before(end)){
result += each.getValue();
}
}
return result;
}
}
//重构后
package 第十章;
import java.util.Date;
import java.util.Enumeration;
import java.util.Vector;
public class Account {
private Vector _entries = new Vector();
double getFlowBetween(DateRange range){
double result = 0;
Enumeration e = _entries.elements();
if(e.hasMoreElements()){
Entry each = (Entry) e.nextElement();
if(range.include(each.getDate())){
result += each.getValue();
}
}
return result;
}
}
package 第十章;
import java.util.Date;
public class DateRange {
private final Date _start;
private final Date _end;
public DateRange(Date _start, Date _end) {
super();
this._start = _start;
this._end = _end;
}
boolean include(Date arg) {
return (arg.equals(_start) || arg.equals(_end) || arg.after(_start) && arg.before(_end));
}
}
package 第十章;
import java.util.Date;
public class Entry {
private Date _chargeDate;
private double _value;
public Entry(Date _chargeDate, double _value) {
super();
this._chargeDate = _chargeDate;
this._value = _value;
}
public Date getDate() {
return _chargeDate;
}
public double getValue() {
return _value;
}
}