Evgenii Legotckoi
Evgenii Legotckoi14 вересня 2018 р. 03:35

Шаблони проектування, що породжують - Будівельник

Причини

  • Відділення побудови складного об'єкта з його уявлення, щоб той самий процес побудови міг створювати різні уявлення.
  • Розбирання складного уявлення, створення однієї мети з кількох варіацій.

Проблеми

Відділення алгоритму інтерпретації об'єкта (наприклад парсинг документа) від механізму збереження готового стану об'єкта. Наприклад, побудова з файлу RTF більш складного або іншого цільового об'єкта, як ASCII текст, TeX, текстовий віджет. Основна увага приділяється створенню складних агрегатів.

Директор викликає сервіс Будівельник, оскільки він інтерпретує зовнішній формат. «Будівельник» створює частину складного об'єкта щоразу, коли він викликається та підтримує всі проміжні стани. Коли продукт буде завершено, клієнт отримує результат від будівельника.

Забезпечує більш тонкий контроль за процесом будівництва об'єкта. На відміну від шаблонів створення, які будують продукти за один виклик, шаблон Builder послідовно створює продукт під контролем директора.

Структура

Reader інкапсулює аналіз інформації на вході. А Builder дозволяє поліморфне створення безлічі своєрідних уявлень чи цілей.

Приклад

Шаблон Builder відокремлює побудову складного об'єкта від його уявлення, тому той самий процес побудови може створювати різні уявлення. Як приклад можемо взяти ресторан дитячого харчування. У цьому випадку цей шаблон використовується так. Дитяче харчування зазвичай складається з основного предмета, предмета, напою та іграшки (наприклад, гамбургера, картоплі, коксу та іграшкового динозавра). Зверніть увагу, що можуть бути зміни у вмісті дитячого харчування, але процес будівництва залишиться тим самим. Незалежно від того, чи замовляє замовник гамбургер, чизбургер чи курку, процес буде таким самим. Співробітник на прилавку направляє замовлення на збирання основного предмета, бічного предмета та іграшку. Ці предмети потім поміщаються у сумку. Напій поміщають у чашку та залишають за мішком. Цей процес використовується і в інших ресторанах.

Контрольний список

  • Вирішіть, чи є задачі проблемою із загальним входом для даних та безліччю можливих уявлень (або виходів).
  • Інкапсулюйте синтаксичний аналіз загального входу в класі Reader.
  • Створіть стандартний протокол для створення всіх можливих вихідних уявлень. Захопіть кроки цього протоколу у інтерфейсі Builder.
  • Визначте похідний клас Builder для кожного цільового представлення.
  • Клієнт створює об'єкт Reader та об'єкт Builder та реєструє останній з першим.
  • Клієнт просить Reader "побудувати".
  • Клієнт просить Builder повернути результат.

Емпіричні правила

  • Іноді шаблони створення доповнюють один одного: Builder може використовувати один із інших шаблонів для реалізації компонентів, які будуть створені. Abstract Factory, Builder та Prototype можуть використовувати Singleton у своїх реалізаціях.
  • Builder фокусується на побудові складного об'єкта крок за кроком. Абстрактна фабрика підкреслює сімейство об'єктів (простих чи складних). Builder повертає продукт як останній крок, але, що стосується абстрактної фабрики, продукт негайно повертається.
  • Builder часто створює Composite.
  • Часто проекти починаються з використання Factory Method (менш складні, настроювані, підкласи розмножуються) і розвиваються в напрямку Abstract Factory, Prototype або Builder (гнучкіші, складніші), оскільки розробник виявляє, що потрібно більше гнучкості.
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:84бали,
  • Рейтинг балів4
Ua

Qt - Тест 001. Сигналы и слоты

  • Результат:42бали,
  • Рейтинг балів-8
ОК

Qt - Тест 001. Сигналы и слоты

  • Результат:47бали,
  • Рейтинг балів-6
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 08:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 11:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 05:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 04:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 08:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
n
nkly02 січня 2025 р. 23:52
Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
M
Marsel16 серпня 2023 р. 11:26
OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 12:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 03:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 00:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

Слідкуйте за нами в соціальних мережах