重构之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);
	}

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值