Прототип — это порождающий паттерн, который позволяет копировать объекты любой сложности без привязки к их конкретным классам.
Все классы—Прототипы имеют общий интерфейс. Поэтому вы можете копировать объекты, не обращая внимания на их конкретные типы и всегда быть уверены, что получите точную копию. Клонирование совершается самим объектом-прототипом, что позволяет ему скопировать значения всех полей, даже приватных.
Давайте попробуем разобрать паттерн Прототип, используя для примера файловую систему ОС. Файловая система является рекурсивной – папки содержат файлы и другие папки, которые, в свою очередь, могут содержать файлы и папки, и так далее.
Каждый файл и папка могут быть представлены интерфейсом inode. Он имеет функцию clone.
Обе структуры файла и папки — file и folder — реализуют функции print и clone, поскольку они имеют тип inode. Также, обратите внимание на функцию clone в file и folder. Функция clone в обеих случаях возвращает копию соответствующего файла или папки. Во время клонирования мы добавляем ключевое слово «_clone» в поле имени.