Замі́на констру́ктора фабри́чним ме́тодом (англ. 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; } ... }
Посилання
- Replace Constructor with Factory Method [ 13 грудня 2014 у Wayback Machine.]
- Replace Constructor with Factory Method [ 13 грудня 2014 у Wayback Machine.]
- GitHub
- Заміна конструктора фабричним методом [ 18 грудня 2014 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Zami na konstru ktora fabri chnim me todom angl Replace Constructor with Factory Method prijom refaktoringu sho dozvolyaye zaminiti konstruktor metodom yakij povertaye ekzemplyar klasu ProblemaYe skladnij konstruktor C sho vikonuye ne tilki prostu ustanovku znachen poliv ob yektu public class Employee public Employee int type this type type RishennyaStvoriti fabrichnij metod i zaminiti nim vikliki konstruktora public class Employee public static Employee Create int type employee new Employee type do some heavy lifting return employee Prichini refaktoringuNajbilsh rozpovsyudzhena prichina zastosuvannya cogo refaktoringu pov yazana z zaminoyu koduvannya tipu pidklasami koli ye nezminnij kod pevnogo tipu yakij vplivaye na povedinku klasu i todi vin zaminyayetsya pidklasami Ye kod v yakomu ranishe stvoryuvavsya ob yekt kudi peredavalosya znachennya pevnogo tipu Pislya zastosuvannya refaktoringu z yavlyayetsya she dekilka pidklasiv v yakih treba stvoryuvati ob yekti zalezhno vid znachennya pevnogo tipu Tak yak konstruktor bazovogo klasu ne mozhe povertati ob yekti pidklasiv to vikoristovuyetsya fabrichnij metod yakij bude povertati ob yekti potribnih klasiv pislya chogo vin zaminyuye soboyu usi vikliki konstruktora bazovogo klasu Fabrichni metodi mozhna vikoristati i v inshih situaciyah koli mozhlivostej konstruktoriv viyavlyayetsya nedostatno Voni vazhlivi pri zamini znachennya posilannyam PerevagiFabrichnij metod ne obov yazkovo povertaye ob yekt togo klasu v yakomu vin buv viklikanij Chasto ce mozhut buti jogo pidklasi vibrani zalezhno vid argumentiv sho podayutsya v metod Fabrichnij metod mozhe mati vdalishe im ya yake opisuye sho i yakim chinom vin povertaye Fabrichnij metod mozhe povernuti vzhe stvorenij ob yekt na vidminu vid konstruktora yakij zavzhdi stvoryuye novij ekzemplyar Poryadok refaktoringuStvoriti fabrichnij metod Pomistiti jogo v tilo vikliku potochnogo konstruktora Zaminiti usi vikliki konstruktora viklikami fabrichnogo metodu Ogolositi konstruktor privatnim Obstezhiti kod konstruktora i sprobuvati vinesti v fabrichnij metod toj kod yakij ne vidnositsya do bezposerednogo konstruyuvannya ob yektu potochnogo klasu Dopomagaye inshim refaktoringamZamina znachennya posilannyam Zamina koduvannya tipu pidklasamiRealizuye pattern proektuvannyaFabrichnij metodRealizaciya na JavaDo zamini class Employee Employee int type this type type Pislya zamini class Employee static Employee create int type employee new Employee type do some heavy lifting return employee Realizaciya na PHPDo zamini class Employee function construct type this gt type type Pislya zamini class Employee static function create type employee new Employee type do some heavy lifting return employee PosilannyaReplace Constructor with Factory Method 13 grudnya 2014 u Wayback Machine Replace Constructor with Factory Method 13 grudnya 2014 u Wayback Machine GitHub Zamina konstruktora fabrichnim metodom 18 grudnya 2014 u Wayback Machine