Справочник должен знать правильную последовательность сборки различных компонентов для создания объектов. Я полагаю, что просто отделить задачу знания порядка или метода построения этих объектов от базового класса Builder (который является просто базовым классом). Если вы переместили конструкцию в базу Builder, она будет напоминать шаблон метода шаблона.
Лучше иметь отдельного директора, который знает, как собирать компоненты, потому что даже при том, что «рецепт» построения компонентов изменяется, базовый класс менять не нужно. Например, скажем, необходимо создать определенный класс компонентов, выполнив 3 шага в определенном порядке:
- Шаг А
- Шаг B
- Шаг C
Допустим, в какой-то момент к семейству добавлен еще один компонент, который можно построить с помощью тех же шагов, но в другом порядке:
- Шаг А
- Шаг С
- Шаг B
В этом случае, если логика для последовательности отделена в Director в отличие от базового класса Builder, можно наследовать новый директор и использовать его для построения. Если логика была в базовом построителе, базовом классе, который может быть частью отдельной библиотеки или JAR или файла заголовка в случае C ++, то это может потребовать перекомпиляции конкретных классов или, по крайней мере, доставки нового JAR.
Я уверен, что есть и другие преимущества разделения такой заботы.