Когда используется? В чём особенности данного паттерна?
Предоставляет интерфейс для создания “семейства” взаимосвязанных объектов без указания их типов данных. Используется в случаях когда система не должна зависеть от способа создания и компоновки объектов и когда объекты взаимосвязаны и используются вместе.