Void ConcreteOutput2::output() 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Void ConcreteOutput2::output()



{

std::cout << "You choose 2nd strategy\n";

}

// printer.h

 

#ifndef _PRINTER_H_

#define _PRINTER_H_

 

#include <cstdlib>

#include "strategy.h"

 

Class Printer

{ public:

Printer();

~Printer();

 

protected:

StrategyPrint* behavior;

public:

void set_output_method(StrategyPrint* strat);

void print();

};

 

#endif

 

// printer.cpp

#include "header/printer.h"

 

Printer::Printer()

{

behavior = NULL;

}

 

Printer::~Printer()

{

delete behavior;

}

 

void Printer::set_output_method(StrategyPrint* strat)

{

behavior = strat;

}

 

Void Printer::print()

{

behavior->output();

}

Достоинства паттерна Strategy

· Систему проще поддерживать и модифицировать, так как семейство алгоритмов перенесено в отдельную иерархию классов.

· Паттерн Strategy предоставляет возможность замены одного алгоритма другим в процессе выполнения программы.

· Паттерн Strategy позволяет скрыть детали реализации алгоритмов от клиента.

Недостатки паттерна Strategy

· Для правильной настройки системы пользователь должен знать об особенностях всех алгоритмов.

· Число классов в системе, построенной с применением паттерна Strategy, возрастает.

Наблюдатель (Observer)

Наблюдатель — поведенческий шаблон проектирования.

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

Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

При реализации шаблона «наблюдатель» обычно используются следующие классы:

Observable — интерфейс, определяющий методы для добавления, удаления и оповещения наблюдателей;

Observer — интерфейс, с помощью которого наблюдатель получает оповещение;

ConcreteObservable — конкретный класс, который реализует интерфейс Observable;

ConcreteObserver — конкретный класс, который реализует интерфейс Observer.

Шаблон «наблюдатель» применяется в тех случаях, когда система обладает следующими свойствами:

● существует, как минимум, один объект, рассылающий сообщения;

● имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения;

● нет надобности очень сильно связывать взаимодействующие объекты, что полезно для повторного использования.

Данный шаблон часто применяют в ситуациях, в которых отправителя сообщений не интересует, что делают получатели с предоставленной им информацией.

 

Назначение паттерна Observer

· Паттерн Observer определяет зависимость "один-ко-многим" между объектами так, что при изменении состояния одного объекта все зависящие от него объекты уведомляются и обновляются автоматически.

· Паттерн Observer инкапсулирует главный (независимый) компонент в абстракцию Subject и изменяемые (зависимые) компоненты в иерархию Observer.

· Паттерн Observer определяет часть "View" в модели Model-View-Controller (MVC).

Паттерн Observer находит широкое применение в системах пользовательского интерфейса, в которых данные и их представления ("виды") отделены друг от друга.

При изменении данных должны быть изменены все представления этих данных (например, в виде таблицы, графика и диаграммы).

 

 

Решаемая проблема

Имеется система, состоящая из множества взаимодействующих классов. При этом взаимодействующие объекты должны находиться в согласованных состояниях. Вы хотите избежать монолитности такой системы, сделав классы слабо связанными (или повторно используемыми).



Поделиться:


Последнее изменение этой страницы: 2021-11-27; просмотров: 50; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.128.243 (0.005 с.)