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