Обзор темы [Шаблоны проектирования]

Затем: МотивацияНазначение

Определите макет алгоритма, передавая некоторые шаги подклассам. Метод Шаблона позволяет подклассам переопределять некоторые шаги алгоритма без изменения структуры алгоритма.

Затем: СтруктураМотивация

Рассмотрим каркас приложения, который обеспечивает классы Document и Application. Класс Application ответствен за открытие существующих документов, сохраненных во внешнем формате, типа файла. Объект Document представляет информацию в документе, если только она считается из файла.

Приложения могут подклассифицировать Application и Document для решения опредененных задач. Например, приложение рисования определяет подклассы DrawDocument и DrawApplication; приложение электронной таблицы определяет подклассы SpreadsheetDocument и SpreadsheetApplication.

Абстрактный класс Application определяет алгоритм для открытия и чтения документа в его операции OpenDocument:

      
void Application::OpenDocument (const char* name) {
        if (!CanOpenDocument(name)) {
            // cannot handle this document
            return;
        }
    
        Document* doc = DoCreateDocument();
    
        if (doc) {
            _docs->AddDocument(doc);
            AboutToOpenDocument(doc);
            doc->Open();
            doc->DoRead();
        }
}
 

OpenDocument определяет каждый шаг для открытия документа. Он проверяет, может ли документ быть открыт, создает специфический для приложения объект Document, добавляет его к набору документов, и читает документ из файла.

Мы называем OpenDocument методом шаблона (template method). Метод шаблона определяет алгоритм в терминах абстрактных операций, который подклассифицирует  переопределение для обеспечения конкретного поведения. Подклассы Application определяют шаги алгоритма, которые проверяют, может ли документ быть открыт (CanOpenDocument), и создает документ (DoCreateDocument). Классы Document определяют шаг, который читает документ (DoRead). Метод шаблона также определяет операцию, которая позволяет подклассам Application знать, когда документ открывается (AboutToOpenDocument), если это необходимо.

Определяя некоторые шаги алгоритма, использующего абстрактные операции, метод шаблона устанавливает только их упорядочение.

Затем: Составные частиСтруктура

Составные части