В мире разработки программного обеспечения шаблоны проектирования служат многоразовыми решениями часто возникающих проблем. Одним из таких шаблонов является шаблон проектирования Bridge, который фокусируется на отделении абстракции от ее реализации. В этой статье мы углубимся в шаблон проектирования Bridge и рассмотрим его участников и различные методы реализации на примерах кода.
Понимание шаблона проектирования моста.
Шаблон проектирования моста отделяет абстракцию от ее реализации, позволяя им изменяться независимо. Он способствует слабой связи между сущностями, инкапсулируя их в отдельные иерархии. Давайте подробнее рассмотрим участников, участвующих в этом паттерне:
-
Абстракция: это высокоуровневый интерфейс, определяющий поведение абстракции. Он поддерживает ссылку на объект реализации через мостовой интерфейс.
-
Уточненная абстракция: это расширение абстракции, которое добавляет дополнительные функции или поведение.
-
Реализация: это интерфейс, определяющий контракт реализации. Он реализуется конкретными классами реализации.
-
Конкретная реализация: это классы, которые предоставляют конкретные реализации интерфейса реализации.
Методы реализации шаблона проектирования моста:
-
Простой мост:
// Abstraction interface Shape { void draw(); } // Refined Abstraction class Circle implements Shape { protected Color color; public Circle(Color color) { this.color = color; } public void draw() { System.out.println("Drawing a " + color.getColorName() + " circle."); } } // Implementation interface Color { String getColorName(); } // Concrete Implementations class Red implements Color { public String getColorName() { return "red"; } } class Blue implements Color { public String getColorName() { return "blue"; } } // Usage public class Main { public static void main(String[] args) { Shape redCircle = new Circle(new Red()); Shape blueCircle = new Circle(new Blue()); redCircle.draw(); blueCircle.draw(); } } -
Продвинутый мост:
// Abstraction abstract class Vehicle { protected Workshop workshop1; protected Workshop workshop2; public Vehicle(Workshop workshop1, Workshop workshop2) { this.workshop1 = workshop1; this.workshop2 = workshop2; } abstract void manufacture(); } // Refined Abstraction class Car extends Vehicle { public Car(Workshop workshop1, Workshop workshop2) { super(workshop1, workshop2); } @Override void manufacture() { System.out.println("Car "); workshop1.work(); workshop2.work(); } } // Implementation interface Workshop { void work(); } // Concrete Implementations class Produce implements Workshop { public void work() { System.out.println("Produced"); } } class Assemble implements Workshop { public void work() { System.out.println("Assembled"); } } // Usage public class Main { public static void main(String[] args) { Workshop produce = new Produce(); Workshop assemble = new Assemble(); Vehicle car = new Car(produce, assemble); car.manufacture(); } }
Шаблон проектирования Bridge — это мощный инструмент для отделения абстракций от их реализации, позволяющий им изменяться независимо. В этой статье мы рассмотрели участников шаблона проектирования Bridge и предоставили примеры кода для двух методов реализации: Simple Bridge и Advanced Bridge. Понимая и применяя этот шаблон, разработчики могут добиться большей гибкости и удобства сопровождения своих проектов программного обеспечения.
Внедряя шаблон проектирования Bridge, инженеры-программисты могут повысить модульность и расширяемость своих приложений, что упрощает их обслуживание и развитие с течением времени.