用子類別取代類別代碼

refactorgram

function createEmployee(name, type) {
  return new Employee(name, type);
}

image/svg+xml

function createEmployee(name, type) {
  switch (type) {
    case "engineer": return new Engineer(name);
    case "salesman": return new Salesman(name);
    case "manager":  return new Manager (name);
  }

與之相反的動作:移除子類別

別名:用狀態/策略取代類別代碼,萃取子類別