首页 > 代码库 > 重构之2.Replace Type Code with Class(以类取代类型码)

重构之2.Replace Type Code with Class(以类取代类型码)

场景


在一个类中我们经常会下定义一些类型码,如:

public static final int INVALID=0;
public static final int VALID=1;

我们可以将这些数值转换为一个类


前提条件:


只有当类型码是纯粹数据时(类型码不会在Switch语句中引起行为的变化时),你才能以类来取代它


修改前代码:


Student

package com.demo.refactor.codetype.before;

public class Student {
	private int id;
	private String name;
	/**
	 *状态:0,有效,1无效 
	 */
	private int status ;
	
	public static final int INVALID=0;
	public static final int VALID=1;
	
	public Student(int id, String name, int status) {
		super();
		this.id = id;
		this.name = name;
		this.status = status;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", status=" + status
				+ "]";
	}
	
}

test:

package com.demo.refactor.codetype.before;

public class StudentTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Student student=new Student(1, "张三", Student.VALID);
		System.out.println(student);
	}

}



修改后:


StatusCode

package com.demo.refactor.codetype.after;

public class StatusCode {
	public static final StatusCode invalid=new StatusCode(0);
	public static final StatusCode valid=new StatusCode(1);
	public static final StatusCode[] codes={invalid,valid};
	private int code;
	
	private StatusCode(int code) {
		this.code = code;
	}
	
	/**
	 * @param index 
	 * @return
	 */
	public static StatusCode create(int index){
		return codes[index];
	}
	public int getCode() {
		return code;
	}

	public void setCode(int code) {
		this.code = code;
	}

	@Override
	public String toString() {
		return "StatusCode [code=" + code + "]";
	}
	
}


Student

package com.demo.refactor.codetype.after;

public class Student {
	private int id;
	private String name;
	private StatusCode code;
	
	public Student(int id, String name, StatusCode code) {
		this.id = id;
		this.name = name;
		this.code = code;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getCode() {
		return code.getCode();
	}
	public void setCode(int index) {
		this.code =StatusCode.create(index);
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", code=" + code + "]";
	}
	
}

StudentTest

package com.demo.refactor.codetype.after;

public class StudentTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Student stu=new Student(1, "李四", StatusCode.invalid);
		System.out.println(stu);
	}

}



重构之2.Replace Type Code with Class(以类取代类型码)