Перевага використання статичного внутрішнього класу будівельників


9

Під час написання кодових інструкцій для компанії я рекомендував використовувати шаблон Builder від Effective Java, а не телескопічні конструктори.

Однак, подумавши над цим трохи більше, безумовно, більш елегантним рішенням є просто видалити клас будівельника, а також видалити зайві конструктори з необов'язковими аргументами.

Тож достатньо мати один конструктор із необхідними параметрами, звичайні геттери / сетери та коментувати код. Під час реалізації просто створіть новий екземпляр yr-об'єкта, потім встановіть значення.

Моє первісне мислення полягало в тому, що користь прийшла від усунення плутанини щодо того, які параметри є необов'язковими та які потрібні; однак справжня користь приходить від використання методу ланцюга / вільного інтерфейсу.

Шаблон конструктора має переваги, коли ви створюєте безліч нових примірників, оскільки ide може виконувати роботу ніг, а також, якщо є багато (15+) додаткових параметрів. Однак чи варто додатково кодувати час статичного внутрішнього класу, чи рекомендуєте ви скористатися конструктором, чи це марна трата часу?


Дивіться також stackoverflow.com/a/1953567/632951
Pacerier

Відповіді:


8

Я схильний слідувати схемі, згідно з якою конструктори повинні надати всі обов'язкові значення, необхідні для створення дійсного та послідовного об’єкта. Для необов'язкових значень я намагаюся подумати про те, яким має бути найпоширеніший за замовчуванням, щоб сеттери використовувались якомога менше.

Якщо я виявлю, що існує багато необов'язкових значень або що більша частка необов'язкових значень, як правило, змінюється у своїх за замовчуванням, тоді я буду використовувати модель конструктора (статичний внутрішній конструктор або інший подібний дизайн).

Джош, як правило, дає гарну корисну пораду - найкраще, що мені подобається в ньому, це те, що порада надходить з окопів - він визнає себе, що допустив помилки при розробці частин Java, а Ефективна Java частково є його "лікуванням", щоб говорити :-)


1
Це нічого не говорить про те, чому внутрішнє повинно бути статичним ...
Джиммі Хоффа

Незмінна та без побічних ефектів також є метою.
Martijn Verburg

6

Шаблон Builder Джоша Блоха, подібно до шаблону GoF Builder Pattern, пропонує спосіб створення незмінного об'єкта з великою кількістю даних за замовчуванням без довгих списків ланцюгових конструкторів.

Якщо у вас "один конструктор з необхідними параметрами, нормальні геттери / сетери", то ваш об'єкт більше не змінюється. тобто. Ви можете змінити його довгий час, коли його буде створено.

Якщо це не є проблемою для вас, то вам ніколи не потрібен зразок Builder в першу чергу. Якщо це проблема, то ваше рішення є помилковим.


Я не думаю, що модель будівельника не має нічого спільного з можливістю зміни, навіть приклад gof на wiki є змінним ... en.wikipedia.org/wiki/Builder_pattern#Java також, шаблон має переваги, які я окреслив у питанні.
NimChimpsky

3
@NimChimpsky: Чи можна застосувати шаблон Builder для створення об'єкта, що змінюється, не викликає сумнівів. Питання в тому, чи варто? Геттери і сетери існують протягом вічності, де об'єкти можна змінювати, вони є ідеальним рішенням, але люди зіткнулися з загальною проблемою створення незмінних об'єктів: некерованих ланцюжків конструкторів. Будівельник був загальним рішенням і, таким чином, став зразком, щоб полегшити спілкування.
пдр
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.