yvv4git / php_design_patterns

Explore design patterns with php
0 stars 0 forks source link

Шеф не выбирает строителя #4

Open PartyZan13 opened 4 years ago

PartyZan13 commented 4 years ago

https://github.com/yvv4git/php_design_patterns/blob/01d578cc4e5229a799b88b178fc6f84ffe55e789/src/Creational/Builder/Factory.php#L21

... он его получает от клиента. Клиентский код где-то находит/получает/создает строителя и приводит его к прорабу(шефу). Тут в примере неплохо бы показать, что строитель может делать не одну операцию в процессе создания продукта, а несколько шагов. И некоторые шаги могут быть необязательными.
В таком случае - прорабов (шефов) также может быть несколько, и последовательность шагов, которая будет вызвана у билдера - определяется тем, какой прораб выбран. Например, будем варить суп. Один шеф-повар умеет говорить простому повару: Набери воды в кастрюлю, почисти овощи, положи в кастрюлю, доведи до кипения, выключи когда готово. Второй шеф повар умеет говорить уже немного другое: Набери воды в кастрюлю, почисти овощи, порежь мелкими кубиками, положи в кастрюлю, доведи до кипения, положи соль, положи специи, выключи когда готово. т.е. последовательность шагов которые выполнит билдер - определяет выбранная клиентом реализация шефа (директора, прораба...) А вот реализация строителя (которую также выбирает клиент и передает шефу в управление) уже отвечает за то как конкретно выполнять эти шаги (какую взять кастрюлю, сколько налить воды, какие выбрать овощи, как именно чистить резать, какие брать специи, сколько именно варить..)

PartyZan13 commented 4 years ago

Но делать разных директоров необязательно. Может быть один директор - но он может предоставлять клиенту несколько методов, "последовательностей шагов" которые он может заставить выполнить билдера. Возвращаясь к примеру с шеф-поваром: шеф-повар может знать много рецептов, и управляя ввереным ему "кухонным рабочим" делать разные блюда по заказу клиента. Главное чтобы директор не разросся до неприличных размеров %)