Шаблоны проектирования
Шпоргалка по книге: «Приёмы объектно-ориентированного проектирования. Паттерны проектирования»
Отношения между классами
- — агрегация (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