function createEmployee(name, type) { return new Employee(name, type); }
function createEmployee(name, type) { switch (type) { case "engineer": return new Engineer(name); case "salesman": return new Salesman(name); case "manager": return new Manager (name); }
逆 サブクラスの削除
別名 状態/戦略による型コードの置換、サブクラスの抽出