Паттерн Prototype.

Когда и зачем его нужно использовать?

Прототип позволяет создавать копии (клонировать) объект, и таким образом создавать новый.

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