Мост (шаблон проектирования)
Материал из Википедии — свободной энциклопедии
Bridge, Мост - шаблон проектирования используемый в проектировании программного обеспечения, означает «разделять абстракцию и реализацию так, что бы они могли изменятся независимо». Шаблон bridge (от англ. — мост) использует инкапсуляцию, аггрегирование и может использовать наследование для того что бы разделить ответственность между классами.
Содержание |
[править] Цель
При частом изменении класса, преимущества объектно-ориентированного подхода становятся очень полезными, позволяя делать изменения в программе обладая минимальными сведениями о реализации программы. Шаблон bridge является полезным там где не только сам класс часто меняется, но и то, что класс делает.
[править] Описание
Когда абстракция и реализация разделены, они могут изменяться независимо. Рассмотрим такую абстракцию как фигура. Существует множество типов фигур, каждая со своими свойствами и методами. Однако есть что-то что объединяет все фигуры. Например каждая фигура должна уметь рисовать себя, масштабироваться и т. п. В то же время рисование графики может отличаться в зависимости от типа ОС, или графической библиотеки. Фигуры должны иметь возможность рисовать себя в различных графических средах, но реализовывать в каждой фигуре все способы рисования или модифицировать фигуру каждый раз при изменении способа рисования непрактично. В этом случае помогает шаблон bridge позволяя создавать новые классы которые будут реализовывать рисование в различных графических средах. При использовании такого подхода очень легко можно добавлять как новые фигуры, так и способы их рисования.
[править] Примеры
[править] Пример на C#
using System; namespace Bridge { // MainApp test application class MainApp { static void Main() { Abstraction ab = new RefinedAbstraction(); // Set implementation and call ab.Implementor = new ConcreteImplementorA(); ab.Operation(); // Change implemention and call ab.Implementor = new ConcreteImplementorB(); ab.Operation(); // Wait for user Console.Read(); } } // "Abstraction" class Abstraction { protected Implementor implementor; // Property public Implementor Implementor { set{ implementor = value; } } public virtual void Operation() { implementor.Operation(); } } // "Implementor" abstract class Implementor { public abstract void Operation(); } // "RefinedAbstraction" class RefinedAbstraction : Abstraction { public override void Operation() { implementor.Operation(); } } // "ConcreteImplementorA" class ConcreteImplementorA : Implementor { public override void Operation() { Console.WriteLine("ConcreteImplementorA Operation"); } } // "ConcreteImplementorB" class ConcreteImplementorB : Implementor { public override void Operation() { Console.WriteLine("ConcreteImplementorB Operation"); } } }
шаблоны проектирования править |
порождающие шаблоны | шаблоны поведения | структурные шаблоны | шаблоны параллельного программирования |
структурные шаблоны проектирования править |
адаптер | мост | компоновщик | декоратор | фасад | заместитель | приспособленец |