Introduce Parameter Object (引入参数对象)

使用场景: 某些参数总是很自然地同时出现。
使用方法: 以一个对象取代这些参数。

//重构前

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;
	}
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值