Міст (шаблон проектування)
Міст (англ. Bridge) - шаблон проектування, відноситься до класу структурних шаблонів.
Зміст |
Призначення [ред.]
Відокремити абстракцію від її реалізації таким чином, щоб перше та друге можна було змінювати незалежно одне від одного.
Мотивація [ред.]
Якщо для деякої абстракції можливо кілька реалізацій, зазвичай застосовують спадкування. Абстрактний клас визначає інтерфейс абстракції, а його конкретні підкласи по-різному реалізують його. Але такий підхід не завжди є достатньо гнучким. Спадкування жорстко прив'язує реалізацію до абстракції, що перешкоджає незалежній модифікації, розширенню та повторному використанню абстракції та її реалізації.
Застосовність [ред.]
Слід використовувати шаблон Міст у випадках, коли:
- треба запобігти постійній прив'язці абстракції до реалізації. Так, наприклад, буває коли реалізацію необхідно обрати під час виконання програми;
- як абстракції, так і реалізації повинні розширюватись новими підкласами. У цьому разі шаблон Міст дозволяє комбінувати різні абстракції та реалізації та змінювати їх незалежно одне від одного;
- зміни у реалізації не повинні впливати на клієнтів, тобто клієнтський код не повинен перекомпілюватись;
- треба повністю сховати від клієнтів реалізацію абстракції;
- треба розподілити одну реалізацію поміж кількох об'єктів (можливо застосовуючи підрахунок посилань), і при цьому приховати це від клієнту.
Структура [ред.]
- Abstraction – абстракція:
- визначає інтерфейс абстракції;
- зберігає посилання на об'єкт типу Implementor;
- RefinedAbstraction – уточнена абстракція:
- розширює інтерфейс, означений абстракцією Abstraction;
- Implementor – реалізатор:
- визначає інтерфейс для класів реалізації. Він не зобов'язаний точно відповідати інтерфейсу класу Abstraction. Насправді обидва інтерфейси можуть бути зовсім різними. Зазвичай, інтерфейс класу Implementor надає тільки примітивні операції, а клас Abstraction визначує операції більш високого рівня, що базуються на цих примітивах;
- ConcreteImplementor – конкретний реалізатор:
- містить конкретну реалізацію інтерфейсу класу Implementor.
Відносини [ред.]
Об'єкт Abstraction містить у собі Implementor і перенаправляє йому запити клієнта.
Джерела [ред.]
Література [ред.]
Алан Шаллоуей, Джеймс Р. Тротт Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию = Design Patterns Explained: A New Perspective on Object-Oriented Design. — М.: «Вильямс», 2002. — 288 с. — ISBN 0-201-71594-5
|
||||||||||||||
