Порождающие шаблоны — шаблоны проектирования, которые абстрагируют процесс инстанцирования (создание экземпляра класса). Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Они важны, когда система больше зависит от композиции объектов, чем от наследования классов. Получается так, что основной упор делается не на жестком кодировании фиксированного набора поведений, а на определении небольшого набора фундаментальных поведений, с помощью композиции которых можно получать любое число более сложных. Таким образом, для создания объектов с конкретным поведением требуется нечто большее, чем простое инстанцирование класса.
Шаблоны: абстрактная фабрика (abstract factory); строитель (builder);
фабричный метод (factory method); прототип (prototype);одиночка (singleton).
public class Singleton {
private static Singleton instance;
private Singleton (){ }
public static Singleton getInstance(){
if (null == instance){
instance = new Singleton();
}
return instance;
}
Структурные шаблоны — шаблоны проектирования, в которых рассматривается вопрос о том, как из классов и объектов образуются более крупные структуры.
Структурные шаблоны уровня класса используют наследование для составления композиций из интерфейсов и реализаций. Простой пример — использование множественного наследования для объединения нескольких классов в один. В результате получается класс, обладающий свойствами всех своих родителей. Особенно полезен этот шаблон, когда нужно организовать совместную работу нескольких независимо разработанных библиотек.
Шаблоны: Адаптер, Мост, Компоновщик, Декоратор, Фасад, Приспособленец
Шаблон Заместитель— шаблон проектирования, который предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).
Поведенческие шаблоны— шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов. Шаблоны: Command/Команда, Interpreter/Интерпретатор, Iterator/Итератор, Cursor, Mediator/Посредник, Memento/Хранитель, Observer/Наблюдатель.