Design Architecture/Refactoring
Replace Parameter with Explicit Methods
lipnus
2022. 4. 20. 13:25
반응형

before
public class ReplaceParameterWithExplicitMethod_before {
static final int ENGINEER = 0;
static final int SALESMAN = 1;
static final int MANAGER = 2;
static public class Employee {
// ...
private int type;
private Employee(int type) {
this.type = type;
}
static Employee create(int type) {
switch (type) {
case ENGINEER:
return new Engineer();
case SALESMAN:
return new Salesman();
case MANAGER:
return new Manager();
default:
throw new IllegalArgumentException("Incorrect type code value");
}
}
public String getName() {
String name = "None";
switch(type) {
case ENGINEER:
name = "ENGINEER"; break;
case SALESMAN:
name = "SALESMAN"; break;
case MANAGER:
name = "MANAGER"; break;
}
return name;
}
}
static class Engineer extends Employee {
public Engineer() {
super(ENGINEER);
}
}
static class Salesman extends Employee {
public Salesman() {
super(SALESMAN);
}
}
static class Manager extends Employee {
public Manager() {
super(MANAGER);
}
}
public static void main(String[] args) {
Employee kent = Employee.create(ENGINEER);
System.out.println(kent.getName());
}
}
after
public class ReplaceParameterWithExplicitMethod_before {
static final int ENGINEER = 0;
static final int SALESMAN = 1;
static final int MANAGER = 2;
static public class Employee {
// ...
private int type;
private Employee(int type) {
this.type = type;
}
static Employee create(int type) {
switch (type) {
case ENGINEER:
return createEngineer();
case SALESMAN:
return createSalesman();
case MANAGER:
return createManager();
default:
throw new IllegalArgumentException("Incorrect type code value");
}
}
public static Engineer createEngineer() {
return new Engineer();
}
public static Salesman createSalesman() {
return new Salesman();
}
public static Manager createManager() {
return new Manager();
}
public String getName() {
String name = "None";
switch(type) {
case ENGINEER:
name = "ENGINEER"; break;
case SALESMAN:
name = "SALESMAN"; break;
case MANAGER:
name = "MANAGER"; break;
}
return name;
}
}
static class Engineer extends Employee {
public Engineer() {
super(ENGINEER);
}
}
static class Salesman extends Employee {
public Salesman() {
super(SALESMAN);
}
}
static class Manager extends Employee {
public Manager() {
super(MANAGER);
}
}
public static void main(String[] args) {
Employee kent = Employee.createEngineer(); //이거 이렇게 할 수 있다
System.out.println(kent.getName());
}
}반응형