Прототип
Prototype
Назначение
Задает виды создаваемых объектов с помощью экземпляра-прототипа и создает новые объекты путем копирования этого прототипа.
Результаты
1. Паттерн прототип позволяет добавлять и удалять продукты во время выполнения.
2. Можно определять новые виды объектов, инстанцируя уже существующие классы, изменяя значений полей и регистрируя экземпляры как прототипы клиентских объектов. В результате число необходимых системе классов может быть уменьшено.
3. Многие приложения строят объекты из более мелких составляющих. В этом случае можно определять новые виды объектов путем изменения структуры.
4. Можно избавиться от иерархии класса Creator в паттерне фабричный метод, если не запрашивать фабричный метод создать новый объект, а клонировать прототип.
5. Возможно динамическое конфигурирование приложения классами, если исполняющая среда будет автоматически создавать экземпляр каждого класса и регистрировать экземпляр в диспетчере прототипов. Затем приложение может запросить у диспетчера прототипов экземпляры вновь загруженных классов, которые изначально не были связаны с программой.
6. Каждый подкласс иерархии Prototype и их составляющие должны реализовывать операцию Clone, но ее добавление может оказаться затруднительным, если используются уже существующие классы.
Структура
Реализация
//
class Prototype {
public:
virtual Prototype *Clone()=0;
};
//
class Prototype1 : public Prototype {
Prototype1(const Prototype1 &);
public:
Prototype1 *Clone() { return new Prototype1(*this); }
};
class Prototype2 : public Prototype {
Prototype2(const Prototype2 &);
public:
Prototype2 *Clone() { return new Prototype2(*this); }
};
//
Prototype *proto;
//
Prototype *p=proto->Clone();