Строитель (Builder)

Метафора

 

Метафора данного паттерна явно следует из его названия. Представьте ситуацию, когда на стройке работает прораб (Director) и строители (Builder’ы). Строители умеют выполнять некоторые работы, которые необходимы, например, для кладки стены: положить на фундамент гидроизоляцию, замешать раствор, выложить кладку из кирпича. Однако сам строитель не знает технологического процесса который необходимо выполнить для того чтобы успешно построить стену. Для этого существует прораб, который благодаря своим знаниям и умениям строителя сможет организовать процесс создания стены. Кроме того, в нашем примере может быть ситуация, когда один строитель может строить одну стену, но совсем не понимает, как построить другую. Для этого начальник стройки (клиент) определяет каким строителем снабдить прораба для получения необходимого типа стены. В метафоре важно понимать, что процесс постройки любой стены унифицирован и имеет четко определенные шаги, а уже конкретный строитель знает, как реализовать эти шаги для создания нужного типа стены (продукта), а прораб контролирует выполнение шагов.

 

Назначение

 

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

 

Диаграмма

Строитель

Строитель

 

Пример

 

В примере реализовано несколько классов строителей, которые создают либо ALV в виде списка, либо в виде грида. Управляет последовательностью операций по созданию ALV класс-директор – lcl_alv_maker. В зависимости от параметров с экрана выбора, класс-директор компонуется либо одним строителем, либо другим.

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

Диаграмма упрощённой реализации:

Упрощённый строитель

Упрощённый строитель

 

Пример:

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