31天学习重构(java)---2. 移动方法

31天学习重构(java)---2.移动方法


点击进入->31天学习重构(java)目录


本例子介绍了“移动方法”,当一个类中的方法与另一个类由太多的关联而形成了高度耦合,我们就应该思考:这个方法是否应该移动到另一个类中。
下面举个例子:一个学生和成绩的例子
public class Achievement {//成绩类
	private double English;
	private double Chinese;
	private double math;
	
	public Achievement( double English ,double Chinese,double math  ){
		this.English = English ;
		this.Chinese = Chinese ;
		this.math = math ;
	}
	
	public double getEnglish() {
		return English;
	}
	public void setEnglish(double english) {
		English = english;
	}
	public double getChinese() {
		return Chinese;
	}
	public void setChinese(double chinese) {
		Chinese = chinese;
	}
	public double getMath() {
		return math;
	}
	public void setMath(double math) {
		this.math = math;
	}
	
}

public class Student {//学生类
	private Achievement achievement;//学生的成绩类
	//省略学生 姓名,学号.....等一些细节
	
	public double getTotalScore( ){
		return achievement.getChinese() +
			   achievement.getEnglish() +
			   achievement.getMath();
	}
	
	public double getTotalCredit( ){//获得总学分,假设每门课都是1.0学分,且60分及格.
		double totalCredit = 0 ;
		if( achievement.getChinese() >= 60 )
		{
			totalCredit += 1.0 ;
		}
		if( achievement.getEnglish() >= 60 )
		{
			totalCredit += 1.0 ;
		}
		if( achievement.getMath() >= 60 )
		{
			totalCredit += 1.0 ;
		}	
		return totalCredit;
	}

	public Achievement getAchievement() {
		return achievement;
	}

	public void setAchievement(Achievement achievement) {
		this.achievement = achievement;
	}
	
	
}
从上面的例子可以看出  getTotalCredit和  getTotalScore 方法的实现部分 全部都是使用了  Achievement类的一些方法,因此这些方法很需要被移动到  Achievement类中
下面是移动后的代码:

public class Student {//学生类
	private Achievement achievement;//学生的成绩类
	//省略学生 姓名,学号.....等一些细节
	
	public double getTotalScore( ){
		return achievement.getTotalScore();
	}
	
	public double getTotalCredit( ){//获得总学分,假设每门课都是1.0学分,且60分及格.
		return achievement.getTotalCredit();
	}

	public Achievement getAchievement() {
		return achievement;
	}

	public void setAchievement(Achievement achievement) {
		this.achievement = achievement;
	}
	
	
}

public class Achievement {//成绩类
	private double English;
	private double Chinese;
	private double math;
	
	public Achievement( double English ,double Chinese,double math  ){
		this.English = English ;
		this.Chinese = Chinese ;
		this.math = math ;
	}
	
	public double getTotalCredit( ){//获得总学分,假设每门课都是1.0学分,且60分及格.
		double totalCredit = 0 ;
		if( getChinese() >= 60 )
		{
			totalCredit += 1.0 ;
		}
		if( getEnglish() >= 60 )
		{
			totalCredit += 1.0 ;
		}
		if( getMath() >= 60 )
		{
			totalCredit += 1.0 ;
		}	
		return totalCredit;
	}
	public double getTotalScore( ){
		return getChinese() + getEnglish() + getMath();
	}
	
	public double getEnglish() {
		return English;
	}
	public void setEnglish(double english) {
		English = english;
	}
	public double getChinese() {
		return Chinese;
	}
	public void setChinese(double chinese) {
		Chinese = chinese;
	}
	public double getMath() {
		return math;
	}
	public void setMath(double math) {
		this.math = math;
	}

}

总结:如果一个类的方法中大量包含了另一个类的方法或成员,也就是大量使用另一个类里的资源,我们就应该思考这个类是不是被赋予了一些自己不该完成的功能,是不是应该把一部分功能移动到其他对应的类中?移动后对是否对以后的维护和扩展都有很大的帮助?。是否需要移动还需考虑许多情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值