Шаблоны проектирования

Шпоргалка по книге: «Приёмы объектно-ориентированного проектирования. Паттерны проектирования»

Отношения между классами

    • — агрегация (aggregation) — описывает связь «часть»–«целое», в котором «часть» может существовать отдельно от «целого». Ромб указывается со стороны «целого».
    • — композиция (composition) — подвид агрегации, в которой «части» не могут существовать отдельно от «целого».
    • — зависимость (dependency) — изменение в одной сущности (независимой) может влиять на состояние или поведение другой сущности (зависимой). Со стороны стрелки указывается независимая сущность.

— обобщение (generalization) — отношение наследования или реализации интерфейса. Со стороны стрелки находится суперкласс или интерфейс.

Виды паттернов

    • — поведенческие (behavioral);
    • — порождающие (creational);

— структурные (structural).

Список шаблонов

Wiki: https://ru.wikipedia.org/wiki/Design_Patterns

+Упрощает замену семейств продуктов

+Изолирует конкретные классы

+Дает более тонкий контроль над процессом конструирования

+Классу заранее неизвестно, объекты каких подклассов ему нужно создавать

+Приводит интерфейс класса Adaptee в соответствие с интерфейсом класса Target

Похож на Декоратор и на Абстрактную фабрику. Поставляет дополнительную абстрактную функциональность классу.

Примеры: Картинка Shape состоящая из других наследников Shape, HashMap

Пример: рисование на Canvas(Bitmap)

+Определяет одну точку взаимодействия с подсистемой

Примеры: формат PNG16, раскраски по номерам, шрифты

Пример: квадрат с размером вместо рисунка.

Пример: onClick() обработка или передача родителю.

+Создание структуры, в которой класс-отправитель и класс-получатель не зависят друг от друга напрямую

Пример: onClickListener() выводящий просто toast

+Грамматику становится легко расширять и изменять

Разные способы обхода множества.

Бывает внешний и внутренний.

Пример: окно с кучей UI элементов взаимодействующих друг с другом.

Пример: onSaveInstanceState(), или revert уникальных состояний

Listener в MVC

+У каждого состояния отдельная обработка.

+Вынесение в обьект состояния его поведения.

+Взаимозаменяемая часть класса.

Пример: Comparator

Двойное инстанцирование

+Предлагает иметь отдельное дерево/множество операций одного характера.

Пример: String.valueOf