Заміна конструктора фабричним методомЗамі́на констру́ктора фабри́чним ме́тодом (англ. Replace Constructor with Factory Method) - прийом рефакторингу, що дозволяє замінити конструктор методом, який повертає екземпляр класу. ПроблемаЄ складний конструктор (C#), що виконує не тільки просту установку значень полів об'єкту. public class Employee
{
public Employee(int type)
{
this.type = type;
}
//...
}
РішенняСтворити фабричний метод і замінити ним виклики конструктора. public class Employee
{
public static Employee Create(int type)
{
employee = new Employee(type);
// do some heavy lifting.
return employee;
}
//...
}
Причини рефакторингуНайбільш розповсюджена причина застосування цього рефакторингу пов'язана з заміною кодування типу підкласами: коли є незмінний код певного типу, який впливає на поведінку класу, і тоді він заміняється підкласами. Є код, в якому раніше створювався об'єкт, куди передавалося значення певного типу. Після застосування рефакторингу з'являється ще декілька підкласів, в яких треба створювати об'єкти залежно від значення певного типу. Так як конструктор базового класу не може повертати об'єкти підкласів, то використовується фабричний метод, який буде повертати об'єкти потрібних класів, після чого він замінює собою усі виклики конструктора базового класу. Фабричні методи можна використати і в інших ситуаціях, коли можливостей конструкторів виявляється недостатньо. Вони важливі при заміні значення посиланням. Переваги
Порядок рефакторингу
Допомагає іншим рефакторингам
Реалізує паттерн проектування
Реалізація на JavaДо заміни class Employee {
Employee(int type) {
this.type = type;
}
//...
}
}
Після заміни class Employee {
static Employee create(int type) {
employee = new Employee(type);
// do some heavy lifting.
return employee;
}
//...
}
Реалізація на PHPДо заміни class Employee {
...
function __construct($type) {
$this->type = $type;
}
...
}
Після заміни class Employee {
...
static function create($type) {
$employee = new Employee($type);
// do some heavy lifting.
return $employee;
}
...
}
Посилання
|
Portal di Ensiklopedia Dunia