如果只在本类中使用,可以使用本方法,否则,考虑使用Introduce Local Extension(引入本地扩展)
代码实例
//如:获取会员生效时间
Prime prime = _prime; // 会员bean,内有年月日
Date effectTime = new Date(prime.getYear(),prime.getMonth(),prime.getDate() + 1);
//重构后,放入静态方法中可以公用
private static Date getEffectTime(prime) {
return new Date(prime.getYear(),prime.getMonth(),prime.getDate() + 1);
}
重构思路: 如果以上的方法很多地方都需要用到,考虑使用Introduce Local Extension(引入本地扩展)。
Introduce Local Extension(引入本地扩展)
作用: 需要在一个无法修改的类中增加新的功能
步骤:
建立一个继承的子类或者包装类
在这个类中加入转型的构造参数
加入需要的新特性方法
根据需要将原对象的引用替换为这个新的对象
代码实例
//如:想包装Date类来实现更多特性
//继承方式
class MyDate extends Date {
public MyDate nextDay()...
public int dayOfYear()...
//添加构造函数
public MyDate(String dateString) {
super(dateString);
}
//添加转型构造函数,
public MyDate(Date arg) {
super(arg.getTime());
}
//上文提到的方法,作为新特性加到这里
Date getEffectTime(Prime prime) {
return new Date(prime.getYear(),prime.getMonth(),prime.getDate() + 1);
}
}
//包装方式
class MyDate {
private Date original;
//添加构造函数
public MyDate(String dateString) {
original = new Date(dateString);
}
//添加转型构造函数,
public MyDate(Date arg) {
original = arg;
}
//上文提到的方法,作为新特性加到这里
Date getEffectTime(Prime prime) {
return new Date(prime.getYear(),prime.getMonth(),prime.getDate() + 1);
}
//还需要搬移原来Date中需要用到的函数...
}