description: >- Отделяне на абстракцията от нейната реализация, така че двете да могат да съществуват независимо —
Bridge
Bridge е структурен шаблон за проектиране, който разделя абстракция от конкретна имплементация като по този начин прави възможно тяхното независимо развитие. С други думи, използването на този шаблон създава две различни йерархии, свързани чрез композиция - осигурявайки по този начин гъвкавост при необходимост от разширение. Изпълнението на модела на проектиране на моста следва идеята за предпочитане на композицията пред наследяването.
Шаблонът е демонстриран чрез пример с интерфейси Shape и Color, където двата интерфейса се имплементират от няколко класа.
.png)
Важно е да се отбележи, че класовете, имплементиращи интерфейса Color, се инстанцират директно в класовете Triangie, Pentagon.
При използване на Bridge модела ще изглежда по следния начин:
public interface Color {
public String applyColor();
}
public abstract class Shape {
//Composition - implementor
protected Color color;
//constructor with implementor as input argument
public Shape(Color c){
this.color=c;
}
public abstract String applyColor();
}
Мостът между абстракциите и използването на композиция при прилагането е важен момент от реализацията на шаблона Bridge.
public class Triangle extends Shape{
public Triangle(Color c) {
super(c);
}
@Override
public String applyColor() {
return color.applyColor();
}
}
public class Pentagon extends Shape{
public Pentagon(Color c) {
super(c);
}
@Override
public String applyColor() {
return color.applyColor();
}
}
public class RedColor implements Color{
public String applyColor(){
return "red";
}
}
public class GreenColor implements Color{
public String applyColor(){
return "green";
}
}
public class Application {
public static void main(String[] args) {
Shape tri = new Triangle(new RedColor());
System.out.println(tri.applyColor());
Shape pent = new Pentagon(new GreenColor());
System.out.println(pent.applyColor());
}
}
Горепосоченият пример илюстрира твърдението, че Bridge може да се използва когато както абстракцията, така и имплементацията могат да имат различни йерархии независимо и е необходимо скриването на имплементацията от клиентското приложение.