首页 > 代码库 > 重构之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 + "]"; } }
StudentTestpackage 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(以类取代类型码)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。