Автор оригинала: Pankaj Kumar.
Сегодня мы рассмотрим шаблон проектирования моста на java. Когда у нас есть иерархии интерфейсов в обоих интерфейсах, а также реализации, то шаблон проектирования моста используется для отделения интерфейсов от реализации и сокрытия деталей реализации от клиентских программ.
Схема Проектирования моста
Так же, как Шаблон адаптера , шаблон проектирования моста является одним из шаблонов структурного проектирования .
В соответствии с рисунком конструкции моста GoF:
Отделите абстракцию от ее реализации, чтобы они могли изменяться независимо
Реализация шаблона проектирования моста следует принципу предпочтения композиции наследованию .
Шаблон проектирования моста в примере Java
Если мы рассмотрим шаблон проектирования моста на примере, это будет легко понять. Допустим, у нас есть иерархия интерфейсов как в интерфейсах, так и в реализациях, как показано на рисунке ниже.
Теперь мы будем использовать шаблон проектирования моста, чтобы отделить интерфейсы от реализации. UML-схема для классов и интерфейсов после применения шаблона моста будет выглядеть так, как показано на рисунке ниже.
Обратите внимание на мост между интерфейсами Форма
и Цвет
и использование композиции при реализации шаблона моста.
Вот код java для интерфейсов формы и цвета.
Вот код java для интерфейсов формы и цвета.
package com.journaldev.design.bridge; public interface Color { public void applyColor(); }
Вот код java для интерфейсов формы и цвета.
package com.journaldev.design.bridge; public abstract class Shape { //Composition - implementor protected Color color; //constructor with implementor as input argument public Shape(Color c){ this.color=c; } abstract public void applyColor(); }
У нас есть классы реализации Треугольника и Пентагона, как показано ниже.
У нас есть классы реализации Треугольника и Пентагона, как показано ниже.
package com.journaldev.design.bridge; public class Triangle extends Shape{ public Triangle(Color c) { super(c); } @Override public void applyColor() { System.out.print("Triangle filled with color "); color.applyColor(); } }
У нас есть классы реализации Треугольника и Пентагона, как показано ниже.
package com.journaldev.design.bridge; public class Pentagon extends Shape{ public Pentagon(Color c) { super(c); } @Override public void applyColor() { System.out.print("Pentagon filled with color "); color.applyColor(); } }
Вот классы реализации для красного и зеленого цветов.
Вот классы реализации для красного и зеленого цветов.
package com.journaldev.design.bridge; public class RedColor implements Color{ public void applyColor(){ System.out.println("red."); } }
Вот классы реализации для красного и зеленого цветов.
package com.journaldev.design.bridge; public class GreenColor implements Color{ public void applyColor(){ System.out.println("green."); } }
Давайте протестируем нашу реализацию шаблона моста с помощью тестовой программы.
Давайте протестируем нашу реализацию шаблона моста с помощью тестовой программы.
package com.journaldev.design.test; import com.journaldev.design.bridge.GreenColor; import com.journaldev.design.bridge.Pentagon; import com.journaldev.design.bridge.RedColor; import com.journaldev.design.bridge.Shape; import com.journaldev.design.bridge.Triangle; public class BridgePatternTest { public static void main(String[] args) { Shape tri = new Triangle(new RedColor()); tri.applyColor(); Shape pent = new Pentagon(new GreenColor()); pent.applyColor(); } }
Вывод приведенного выше примера программы bridge pattern является:
Triangle filled with color red. Pentagon filled with color green.
Шаблон проектирования моста можно использовать, когда и абстракция, и реализация могут иметь разные иерархии независимо друг от друга, и мы хотим скрыть реализацию от клиентского приложения.