Автор начал с краткого описания MVC (Model-View-Controller). Немного напомню, что это такое:
View — это то, что мы видим на экране. Там у нас всякие кнопочки, анимации, списки, картинки и прочее.
Model — объект приложения. Тут всякие данные, базы, бизнес-логика и т.п.
Controller — описание того как мы реагирует на взаимодействия пользователя с экраном (например, реакция на клик по кнопочке).
MVC позволяет отделять всё вышеперечисленное друг от друга, чтобы повысить гибкость и повторно использовать в других местах. Ходят слухи, что до появления MVC всё было смешано и люди писали код в одной активити. :)
Как работает MVC: при каждом изменении моделька уведомляет, что что-то изменилось, и View уже обновляют себя. Тут плюс в том, что к одной модельке могут быть присоединены несколько View. Я думала как можно это представить на реальном примере и получилось только так: есть кот черный кот Мурзик и белый кот Барсик и есть общая кошачья миска с кормом. Коты — это View. Миска — моделька. Как только миска наполняется кормом, оба кота бегут к ней и насыщаются — одна моделька в виде миски и два кота в виде разных View.
И тут мы наконец-то подошли к паттернам. Три основных паттерна MVC:
- Паттерн "Наблюдатель" — когда мы разделяем объекты таким образом, что изменение одного отражается сразу на нескольких других, причем изменившийся объект не знает о реализации других. Это как миска с котами. Одна миска ничего не знает о котах, но наполнение миски отразилось на сытости котов.
- Паттерн "Компоновщик" — пригодится, когда мы хотим сгруппировать объекты и рассматривать их как отдельный объект. Этот паттерн позволит создать иерархию классов, в которой одни подклассы — примитивные объекты, а другие — составные и более сложные. Наверное, тут можно сделать ассоциацию с семьей. Семья — это один объект, но состоит из множества других (папа, мама, кот).
- Паттерн "Стратегия" — объект, представляющий алгоритм. Этот паттерн будет полезным, когда хотим подменить один алгоритм другим, если существует много вариацией одного алгоритма или когда с ним связаны сложные структуры данных, которые надо инкапсулировать. Тут я пока не придумала пример из жизни. В следующих главах будет более подробное объяснение.
Паттерны делятся на порождающие (связаны с процессами), структурные (связаны с композицией объектов и классов) и паттерны поведения. И эти группы делятся на классы (отношения между классами и подклассами) и объекты.
С классами отношения статичны из-за наследования и зафиксированы на этапе компиляции.
Паттерны уровня объектов могут изменяться во время выполнения и более динамичны. Наследование есть почти везде, поэтому к классам отнесены лишь те, которые концентрируются на отношениях между классами.
Порождающие паттерны классов — частично делегируют ответственность за создание объектов своим подклассам.
Порождающие паттерны объектов — передают ответственность другому объекту.
Структурные паттерны классов — используют наследование для составления классов.
Структурные паттерны объектов — описывают способ сборки объектов из частей.
Поведенческие паттерны классов — используют наследование для описания алгоритмов и потока управления.
Поведенческие паттерны объектов — описывают как объекты, принадлежащие некоторой группе, совместными усилиями выполняют задачу, которая ни оному отдельному не под силу.
Паттерны можно компоновать и некоторые очень похожи.