MVC в книге GoF предназначен для настольных компьютеров, он использует шаблон наблюдателя для обновления представлений. Пример команды в книге GoF предназначен для редактора.
...
Взятый на первый взгляд, этот пример отражает дизайн, который отделяет представления от моделей. Но проект применим к более общей проблеме: разделение объектов таким образом, чтобы изменения одного объекта могли повлиять на любое количество других, не требуя, чтобы измененный объект знал детали других. Этот более общий дизайн описывается шаблоном проектирования Observer (стр. 293).
Еще одна особенность MVC заключается в том, что представления могут быть вложенными. Например, панель управления кнопками может быть реализована как сложное представление, содержащее вложенные представления кнопок. Пользовательский интерфейс инспектора объектов может состоять из вложенных представлений, которые можно повторно использовать в отладчике. MVC поддерживает вложенные представления с классом CompositeView, подклассом View. Объекты CompositeView действуют так же, как объекты View; Составное представление можно использовать везде, где можно использовать представление, но оно также содержит вложенные представления и управляет ими.
Опять же, мы могли бы думать об этом как о дизайне, который позволяет нам обрабатывать составное представление так же, как мы относимся к одному из его компонентов. Но дизайн применим к более общей проблеме, которая возникает всякий раз, когда мы хотим сгруппировать объекты и относиться к группе как к отдельному объекту. Этот более общий дизайн описывается шаблоном проектирования Composite (163). Он позволяет создавать иерархию классов, в которой некоторые подклассы определяют примитивные объекты (например, Button), а другие классы определяют составные объекты (CompositeView), которые собирают примитивы в более сложные объекты.
MVC также позволяет изменять способ реагирования представления на ввод пользователя без изменения его визуального представления. Например, вы можете изменить его реакцию на клавиатуру или использовать всплывающее меню вместо командных клавиш. MVC инкапсулирует механизм ответа в объект контроллера. Существует иерархия классов контроллеров, позволяющая легко создать новый контроллер как вариант существующего.
Представление использует экземпляр подкласса Controller для реализации конкретной стратегии ответа; чтобы реализовать другую стратегию, просто замените экземпляр контроллером другого типа. Можно даже изменить контроллер представления во время выполнения, чтобы представление изменяло то, как оно реагирует на ввод пользователя. Например, представление можно отключить, чтобы оно не принимало ввод, просто предоставив ему контроллер, который игнорирует события ввода.
Отношения «представление-контроллер» являются примером шаблона проектирования «Стратегия» (315). Стратегия - это объект, представляющий алгоритм. Это полезно, когда вы хотите заменить алгоритм статически или динамически, когда у вас много вариантов алгоритма или когда алгоритм имеет сложные структуры данных, которые вы хотите инкапсулировать.
MVC использует другие шаблоны проектирования, такие как Factory Method (107), чтобы указать класс контроллера по умолчанию для представления и Decorator (175), чтобы добавить прокрутку в представление. Но основные взаимосвязи в MVC задаются шаблонами проектирования Observer, Composite и Strategy.
...