Replace Subclass with Fields 以字段取代子类

使用场景: 当你的各个子类的唯一差别只在“返回常量数据”的函数身上时,使用字段取代子类。
使用方法: 修改这些函数,使它们返回超类中的某个(新增)字段,然后销毁子类。

重构前:


public abstract class Person {
	
	abstract boolean isMale();

	abstract char getCode();
	
}
public class Male extends Person {
	boolean isMale() {
		return true;
	}

	char getCode() {
		// TODO Auto-generated method stub
		return 'M';
	}
}
public class Female extends Person {
	boolean isMale() {
		return false;
	}

	char getCode() {
		// TODO Auto-generated method stub
		return 'F';
	}

重构初步完成

public abstract class Person {
    boolean _isMale;
	char _code;
	
	static Person createMale(){
		return new Male();
	}
	static Person createFemale(){
		return new Female();
	}
	boolean isMale(){
		return _isMale;
	}
	public Person(boolean isMale, char code) {
		// TODO Auto-generated constructor stub
		_isMale = isMale;
		_code = code;
	}
	
   public class Female extends Person {
   public Female() {
   	super(false, 'F');
   	// TODO Auto-generated constructor stub
   	}
}
public class Male extends Person {
	public Male() {
		super(true, 'M');
		// TODO Auto-generated constructor stub
	}
}

在这里插入图片描述

最终重构完成 删除Female.class 和Male.class


public  class Person {
	private boolean _isMale;
	private char _code;
	
	static Person createMale(){
		return new Person(true,'M');
	}
	static Person createFemale(){
		return new Person(false,'F');
	}
	boolean isMale(){
		return _isMale;
	}
	public Person(boolean isMale, char code) {
		// TODO Auto-generated constructor stub
		_isMale = isMale;
		_code = code;
	}
	public static void main(String[] args) {
		Person female = Person.createFemale();
		System.out.println(female.isMale());
	}
	
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值