Плюсы
Минусы
Применение
Цель
Отделяет конструирование сложного объекта от его представления так, что в
результате одного и того же процесса конструирования могут получаться разные
представления.
Плюсы
Минусы
Например, один строитель делает стены из дерева и стекла, другой из камня и железа,
третий из золота и бриллиантов. Вызвав одни и те же шаги строительства, в первом
случае вы получите обычный жилой дом, во втором — маленькую крепость, а в третьем
— роскошное жилище. Замечу, что код, который вызывает шаги строительства, должен
работать со строителями через общий интерфейс, чтобы их можно было свободно
взаимозаменять.
Прототип
Прототип — это порождающий паттерн проектирования, который позволяет
копировать объекты, не вдаваясь в подробности их реализации.
Назначение
Задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые
объекты путём копирования этого прототипа. Он позволяет уйти от реализации и
позволяет следовать принципу «программирование через интерфейсы». В качестве
возвращающего типа указывается интерфейс/абстрактный класс на вершине иерархии,
а классы-наследники могут подставить туда наследника, реализующего этот тип.
Проще говоря, это паттерн создания объекта через клонирование другого объекта
вместо создания через конструктор.
Применение
Паттерн используется чтобы:
Реализация этого метода в разных классах очень схожа. Метод создаёт новый объект
текущего класса и копирует в него значения всех полей собственного объекта. Так
получится скопировать даже приватные поля, так как большинство языков
программирования разрешает доступ к приватным полям любого объекта текущего
класса.
Объект, который копируют, называется прототипом (откуда и название паттерна).
Когда объекты программы содержат сотни полей и тысячи возможных конфигураций,
прототипы могут служить своеобразной альтернативой созданию подклассов.
Плюсы
Минусы
Применение
должен быть ровно один экземпляр некоторого класса, легко доступный всем
клиентам;
единственный экземпляр должен расширяться путём порождения подклассов, и
клиентам нужно иметь возможность работать с расширенным экземпляром без
модификации своего кода.
Примеры использования
ПРОБЛЕМА
Одиночка решает сразу две проблемы, нарушая принцип единственной
ответственности класса.
Интересно, что в наше время паттерн стал настолько известен, что теперь люди
называют «одиночками» даже те классы, которые решают лишь одну из проблем,
перечисленных выше.
РЕШЕНИЕ
Все реализации одиночки сводятся к тому, чтобы скрыть конструктор по умолчанию и
создать публичный статический метод, который и будет контролировать жизненный
цикл объекта-одиночки.
Если у вас есть доступ к классу одиночки, значит, будет доступ и к этому
статическому методу. Из какой точки кода вы бы его ни вызвали, он всегда будет
отдавать один и тот же объект.
Аналогия из жизни
Правительство государства — хороший пример одиночки. В государстве может быть
только одно официальное правительство. Вне зависимости от того, кто конкретно
заседает в правительстве, оно имеет глобальную точку доступа «Правительство страны
N».