Прототип (Prototype)

Прототип (Prototype) – это порождающий паттерн проектирования, который используется для создания новых объектов путем копирования существующих объектов, называемых прототипами. Паттерн Прототип позволяет создавать объекты, которые могут иметь начальное состояние, и при этом избегает прямого связывания классов между собой.

Основные участники паттерна Прототип:

  1. Прототип (Prototype): Это абстрактный класс или интерфейс, который определяет метод clone(). Этот метод позволяет создавать копии объектов прототипа.
  2. Конкретные прототипы (Concrete Prototypes): Это классы, которые реализуют интерфейс прототипа и предоставляют конкретную реализацию метода clone(). Каждый конкретный прототип может иметь собственное начальное состояние.
  3. Клиент (Client): Это клиентский код, который использует прототипы для создания новых объектов. Клиент может запрашивать у прототипа копии объектов с нужным состоянием.

Пример реализации паттерна Прототип на Python:

python

from copy import deepcopy # Абстрактный класс прототипа class Prototype: def clone(self): pass # Конкретные прототипы class ConcretePrototype1(Prototype): def __init__(self, value): self.value = value def clone(self): return deepcopy(self) class ConcretePrototype2(Prototype): def __init__(self, name): self.name = name def clone(self): return deepcopy(self) # Клиентский код prototype1 = ConcretePrototype1(10) copy1 = prototype1.clone() print(copy1.value) # Вывод: 10 prototype2 = ConcretePrototype2("John") copy2 = prototype2.clone() print(copy2.name) # Вывод: John

В этом примере есть два конкретных прототипа (ConcretePrototype1 и ConcretePrototype2), каждый из которых реализует метод clone(). Клиентский код создает объекты прототипов и создает копии, используя метод clone(). Каждая копия является независимой копией начального состояния прототипа.

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