• Шаблоны для вашего сайта
  • Сделать сайт
  • Реклама
  • Berry CSS
  • Albireo Framework
  • Бесплатный HTML-курс
  • Telegram-канал
  • Обратная связь
MaxSite.org
О создании сайтов и не только
Создание сайтов под ключ →
Вход
×
или зарегистрироваться
PHP/ООП
  • Паттерн Singleton в PHP
  • ООП в PHP
  • Композиция и наследование ООП в PHP
  • Шаблоны проектирования для PHP
  • Шаблон «Fluent interface» (Текучий интерфейс)
  • Шаблон проектирования Facade (Фасад)
  • Шаблон Abstract Factory (Абстрактная фабрика) на PHP
  • Шаблон Factory Method (Фабричный метод) на PHP
  • Шаблон Singleton. Трейты (trait) в PHP
  • Шаблон Multiton (Пул одиночек)
  • Шаблон Registry (Реестр)
  • Шаблон Composite (Компоновщик)
  • Шаблон Builder (Строитель)
  • Шаблон Strategy (Стратегия)
  • Шаблон проектирования Adapter (адаптер)
  • Шаблон Observer (Наблюдатель)
  • Шаблон Prototype (Прототип)
  • Шаблон Bridge (Мост)
  • Шаблон Decorator (Декоратор)
  • Шаблон Flyweight (Приспособленец)
  • Шаблон Proxy (Заместитель)
  • Шаблон «Template method» (Шаблонный метод)
  • Dependency injection (внедрение зависимости)
  • Понимание ООП на примере Паскаля
  • Dependency Injection простыми словами
Навигация
  • Шаблоны для MaxSite CMS 22
  • jQuery и JavaScript 6
  • Java и Android 5
  • PHP/ООП 25
  • SQL 17
  • Albireo Framework 11
  • Berry CSS 7
  • CSS, HTML, LESS, SASS 23
  • PHP 37
  • Тайм-менеджмент 9
  • Софт 37
  • SEO 13
  • Git. GitHub 3
  • CodeIgniter 5
  • Landing Page 3
  • Alpine.js 14
  • Фильмы 2
  • Дневник 55

Вот здесь можно заказать создание сайта, шаблона или лендинга. Также вы можете выбрать готовые шаблоны для MaxSite CMS по небольшой цене. Также можно купить отдельные модули, компоненты для вашего сайта.

Шаблон Builder (Строитель)

PHP/ООППросмотров: 5209Комментарии: 212 августа 2019 г.
ООП

На мой взгляд паттерн Builder один из самых сложных. Найти ему практическое применение проблематично, поэтому он используется только в очень редких случаях, когда требуется работать со сложным составным объектом.

Смысл Строителя в том, чтобы иметь возможность получить конечный результат в различном виде. Например есть некий «Продукт», который может быть получен разными «Строителями» (один делает одно, другой другое). И есть класс, который управляет строителями — «Директор».

Исходный рабочий код, вы всё также найдёте на гитхабе. Рекомендую вначале с ним бегло ознакомиться и держать под рукой по мере объяснений ниже. :-)

Итак, как это работает?

Есть некий продукт — класс Product. У него есть метод add() — это некое действие которое и создает сам «Продукт». В реальности там может быть множество других методов. Метод getProduct() отдает результат всех операций (готовый «Продукт»).

Так же есть «Строители» — классы ConcreteBuilder1 и ConcreteBuilder2. Оба они расширяют абстрактный класс с той целью, чтобы обеспечить единый тип данных.

«Строители» знают как создавать «Продукт». Для этого они используют методы класса Product, но каждый делает это по своему. То есть готовый «Продукт» у каждого «Строителя» будет разный. Получить результат «строительства» можно через метод getResult().

Теперь как это использовать.

Вначале создаются экземпляры «Директора» и «Строителей». У «Директора» есть метод setConstruct(), через который происходит передача конкретного «Строителя». Поскольку строители имеют один тип, то мы знаем какие у них есть методы выполнения (buildPartA, buildPartB). Это всё происходит автоматом в setConstruct().

После этого можно получить готовый продукт. Экземпляр «Продукта» возвращается через метод «Строителя» getResult() — обратите внимание, что это объект класса Product. И после этого уже получаем готовый «Продукт» через getProduct().


Создание сайтов (Украина) →
CodeIgniter 4. Основы. Установка
Шаблон Composite (Компоновщик)
twitter.com facebook.com
Другие записи сайта
Mixin в LESS бывают разные
Mixin в LESS бывают разные
База SQLite и основы SQL. Часть 5
База SQLite и основы SQL. Часть 5
MaxSite CMS исполнилось три года!
MaxSite CMS исполнилось три года!
Как организовать древовидные рубрики на сайте (Adjacency List)
Как организовать древовидные рубрики на сайте (Adjacency List)
Интернет-сайты: стадия насыщения
Интернет-сайты: стадия насыщения
Некоторые результаты последнего опроса
Некоторые результаты последнего опроса

Комментариев: 2 RSS

1Олег10-02-2022 19:38

Странный код, зачем строителям абстрактный метод для получения результата если он в них реализован одинаково.

2MAX11-02-2022 08:32

Абстрактный класс нужен для того, чтобы классы строителей были одного типа. В принципе можно вместо абстрактного класса использовать интерфейс. Когда у строителей один тип, то класс директора может ими манипулировать одинаково.

Оставьте комментарий!

Комментарий будет опубликован после проверки. Вы соглашаетесь с правилами сайта.

(обязательно)

MaxSite.org
Как создать свой сайт

Услуги по созданию сайтов, блогов, лендингов
Обратная связь • Реклама на сайте
Карта сайта
Мои проекты
  • Шаблоны для вашего сайта
  • Заказать создание сайта
  • MaxSite CMS
  • Berry CSS (CSS Utilities)
  • Albireo Framework
  • UniCSS (Universal Atomic CSS)
  • Landing Page Framework
  • Бесплатные НТML-курсы
Ссылки
  • Telegram-канал
  • Github
  • Twitter
  • Telegram-бот
  • RSS
© MaxSite.org, 2006-2022. Работает на MaxSite CMS | Время: 0.2718 | SQL: 25 | Память: 4.6MB | Вход