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