Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Название и классификация паттерна





Мост - паттерн, структурирующий объекты. (Структурные паттерны).

Назначение

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

Мотивация

Если для некоторой абстракции возможно несколько реализаций, то обычно применяют наследование. Абстрактный класс определяет интерфейс абстракции, а его конкретные подклассы по-разному реализуют его. Но такой подход не всегда обладает достаточной гибкостью. Наследование жестко привязывает реализацию к абстракции, что затрудняет независимую модификацию, расширение и повторное использование абстракции и ее реализации.

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

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


Таким образом, иерархия классов получается довольно сложной, что будет особенно заметно, если потребуется увеличить число предметов или способов сдачи экзамена (например, добавить способ сдачи экзамена в виде теста).

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


Приведем реализацию описанного выше примера:

Реализация на C++

//базовый класс для способов приема экзамена
class TPassExam {
public:
virtual void pass() = 0;
};

//реализация различных способов приема
class TPassExamTalk: public TPassExam {
public:
void pass() {
//...
};
};

class TPassExamWrite: public TPassExam {
public:
void pass() {
//...
};
};

//базовый класс для предметов
class TSubject {
protected:
//аргегация способа приема экзамена
TPassExam* wayToPass;
public:
virtual void passExam() = 0;
};

//конкретные предметы
class TMathematics: public TSubject {
public:
//здесь используется нужный метод pass(),
//который определяется типом переменной
//wayToPass
void passExam() { wayToPass->pass(); };
};

class TPhysics: public TSubject {
public:
void passExam() { wayToPass->pass(); };
};

 

Применимость

Используйте паттерн мост, когда:

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

· и абстракции, и реализации должны расширяться новыми подклассами. В таком случае паттерн мост позволяет комбинировать разные абстракции и реализации и изменять их независимо;

· изменения в реализации абстракции не должны сказываться на клиентах, то есть клиентский код не должен перекомпилироваться;

Паттерн Bridge

· (только для C++!) вы хотите полностью скрыть от клиентов реализацию абстракции. В C++ представление класса видимо через его интерфейс;

· число классов начинает быстро расти, как мы видели на первой диаграмме из раздела ≪Мотивация≫. Это признак того, что иерархию следует разделить на две части.

 

Date: 2016-07-25; view: 328; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию