Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сит.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
353.03 Кб
Скачать

10. Структурные паттерны. Назначение, обобщенные свойства, применение. Пример реализации.

Структурные шаблоны — шаблоны проектирования, в которых рассматривается вопрос о том, как из классов и объектов образуются более крупные структуры.

Структурные шаблоны уровня класса используют наследование для составления композиций из интерфейсов и реализаций. Простой пример — использование множественного наследования для объединения нескольких классов в один. В результате получается класс, обладающий свойствами всех своих родителей. Особенно полезен этот шаблон, когда нужно организовать совместную работу нескольких независимо разработанных библиотек.

Шаблоны:Адаптер,Мост,Компоновщик,Декоратор,Фасад,Приспособленец,Заместитель

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

Система поддерживает требуемые данные и поведение, но имеет неподходящий интерфейс. Чаще всего шаблон Адаптер применяется если необходимо создать класс, производный от вновь определяемого или уже существующего абстрактного класса.

Шаблон Адаптер позволяет включать уже существующие объекты в новые объектные структуры, независимо от различий в их интерфейсах.

Шаблон Заместитель— шаблон проектирования, который предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).

public class Main {

public static void main(String[] args) {

IMath p = new MathProxy();

System.out.println("4 + 2 = " + p.add(4, 2));

}

} /** * "Subject" */

public interface IMath {

public double add(double x, double y);

} /** * "Real Subject" */

public class Math implements IMath {

public double add(double x, double y) {

return x + y;

}

} /** * "Proxy Object" */

public class MathProxy implements IMath {

private Math math;

public MathProxy() {

math = new Math();

}

public double add(double x, double y) {

return math.add(x, y);

}

}

11.Паттерны поведения. Назначение, обобщенные свойства, применение. Пример реализации

Поведенческие шаблоны (англ. behavioral patterns) — шаблоны проектирования, определяющие алгоритмы и способы реализации взаимодействия различных объектов и классов.

В поведенческих шаблонах уровня класса используется наследование, чтобы определить поведение для различных классов. В поведенческих шаблонах уровня объекта используется композиция. Некоторые из них описывают, как с помощью кооперации несколько равноправных объектов работают над заданием, которое они не могут выполнить по отдельности. Здесь важно то, как объекты получают информацию о существовании друг друга. Объекты-коллеги могут хранить ссылки друг на друга, но это усиливает степень связанности системы. При высокой связанности каждому объекту пришлось бы иметь информацию обо всех остальных. Некоторые из шаблонов решают эту проблему.

Command/Команда, Interpreter/Интерпретатор

Iterator/Итератор,Cursor,Mediator/Посредник Memento/Хранитель,Observer/Наблюдатель,

Наблюдатель - паттерн поведения объектов, устанавливающий систему оповещения объектами своих соседей в процессе их деятельности. Известен также под именами: Dependents (подчиненные), Publish-Subscribe (издатель-подписчик). оригинал источник codelab.ru codelab.ru

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

В каждый класс, производящий знач. действия добавлять обращение к этим всем другим заинтересованным объектам, но этот способ довольно губителен: мало того, что таким образом мы «хардкодим» как попало новые связи между объектами – это еще и в разы затруднит последующую модификацию каких либо участников.

Команда.

Инкапсулирует запрос как объект, позволяя тем самым задавать параметры

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

или протоколировать их, а также поддерживать отмену операций.

class Command {

public:

virtual ~Command ();

virtual void Execute () = 0;

protected:

Command ( ) ;

};

class OpenCommand : public Command {

public :

OpenCommand (Application*) ;

virtual void Execute ( ) ;

protected:

};

void OpenCommand::Execute () {

const char* name = AskUser();

if (name != 0) {

Document* document = new Document(name);

_application->Add(document);

document->0pen() ;}}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]