Тема: Прототип (prototype) Подготовили: Махиня Д. А. Кравченко В. С.
Что представляет собой паттерн Прототип? Прототип – паттерн, порождающий объекты.
Назначение паттерна «Прототип» Определяет, задает виды создаваемых объектов с помощью интерфейса некоторого экземпляра-прототипа, и создает новые объекты путем копирования (клонирования) этого экземпляра.
Признаки применения паттерна «Прототип» : Порождаемые объекты определяются в процессе функционирования системы; Для того чтобы избежать построения иерархий конкретных фабрик, параллельных иерархии объектов-продуктов; Создаваемые объекты могут находиться в одном из небольшого числа различных состояний, так что может оказаться целесообразней устанавливать соответствующее число прототипов и клонировать их.
Принцип действия
Пример использования Prototype Представьте что у вас есть пустой пакет (из под сока), а вам нужен полный с апельсиновым соком. Вы «говорите» пакету «Хочу пакет апельсинового сока» , он в свою очередь создает свою копию и заполняет ее соком, который вы попросили. В данном случае пустой пакет и является «прототипом» , и в зависимости от того что вам требуется, он создает на своей основе требуемые вами объекты (пакеты сока).
Пример Copyable. java 1. public interface Соруаblе{ 2. public Object copy(); 3. ) Shape. java 1. public class Shape implements Copyable{ 2. private double x; 3. private double y; 4. public Shape(double initx, double inity) { 5. x = initx; 6. y = inity; 7. } 8. public Object copy(){ 9. return new Shape(x, y); 10. }. . . n. }
Run. Pattern. java 1. public class Run. Pattern{ 2. public static void main(String [] arguments) { 3. Shape shape 1 = new Shape (10, 15); 4. Shape shape 2 = (Shape)shape 1. copy(); 5. } 6. }
Преимущества прототип позволяет получить новые объекты не задавая их конкретные классы; мы можем добавлять в систему новые классы за частую не изменяя клиента; мы скрываем от клиента названия конкретных классов (клиент знает только о классе Prototype) уменьшая тем самым степень связности клиента (то есть уменьшаем количество известных ему элементов)
Недостатки Каждый тип создаваемого продукта должен реализовывать операцию клонирования clone(). В случае, если требуется глубокое копирование объекта (объект содержит ссылки или указатели на другие объекты), это может быть непростой задачей.
Вопросы Что представляет собой паттерн Prototype? а) паттерн, порождающий объекты б) паттерн поведения объектов, устанавливающий систему оповещения объектами своих соседей в процессе их деятельности в) паттерн, контролирующий доступ к объектам, перехватывая все вызовы.
Вопросы Какое назначение Prototype? а) отделяет конструирование сложного объекта от его представления; б) создает новые объекты путем копирования этого экземпляра; в) гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа. Придумайте свой абстрактный пример Prototype (как с пакетом сока).