Прототип - Это порождающий паттерн проектирования, которые позволяет копировать объекты, не вдаваясь в подробности их реализации. У вас есть объект, который нужно скопировать. Как это сделать? Нужно создать пустой объект такого же класса, а затем поочерёдно скопировать значения всех полей из старого объекта в новый. Прекрасно! Но есть нюанс. Не каждый объект удастся скопировать таким образом, ведь часть его состояния может быть приватной, а значит — недоступной для остального кода программы. Паттерн Прототип поручает создание копии самим копируемым объектам. Он вводит общий интерфейс для всех объектов, поддерживающих клонирование...
Давайте представим, что у нас есть Барсик. И он нам настолько сильно нравится, что мы хотим создать полную его копию. В реальной жизни, конечно, мы так не можем сделать. Но вот в коде мы можем создать новый объект класса котика и вручную указать новому коту все параметры и их значения, которые были у Барсика. Звучит отлично, но проблема в том, что у Барсика какие-то поля могут быть приватными и мы не можем получить их значения. Плюс, иногда мы вообще не имеем доступа к Барсику и общаемся с ним через интерфейсы (например, когда используем сторонние библиотеки)...