Шаблон проектирования моста в Java
Сегодня мы рассмотрим шаблон проектирования моста в java. Когда у нас есть иерархия интерфейсов как в интерфейсах, так и в реализациях, тогда используется шаблон проектирования моста, чтобы отделить интерфейсы от реализации и скрыть детали реализации от клиентских программ.
Шаблон проектирования моста
Как и шаблон адаптера, шаблон проектирования моста является одним из шаблонов структурного проектирования. Согласно шаблону проектирования моста GoF:
Отделите абстракцию от ее реализации, чтобы они могли меняться независимо друг от друга.
Реализация шаблона проектирования моста следует идее предпочтения наследования.
Шаблон проектирования моста в примере Java
package com.journaldev.design.bridge;
public interface Color {
public void applyColor();
}
Shape.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();
}
У нас есть классы реализации Triangle и Pentagon, как показано ниже. Треугольник.java
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();
}
}
Пентагон.java
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();
}
}
Вот классы реализации для RedColor и GreenColor. RedColor.java
package com.journaldev.design.bridge;
public class RedColor implements Color{
public void applyColor(){
System.out.println("red.");
}
}
GreenColor.java
package com.journaldev.design.bridge;
public class GreenColor implements Color{
public void applyColor(){
System.out.println("green.");
}
}
Давайте проверим нашу реализацию шаблона моста с помощью тестовой программы. BridgePatternTest.java
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();
}
}
Вывод приведенной выше примерной программы шаблона моста:
Triangle filled with color red.
Pentagon filled with color green.
Шаблон проектирования моста можно использовать, когда и абстракция, и реализация могут независимо иметь разные иерархии, и мы хотим скрыть реализацию от клиентского приложения.