description: >- Отделяне на абстракцията от нейната реализация, така че двете да могат да съществуват независимо —

Bridge

Bridge е структурен шаблон за проектиране, който разделя абстракция от конкретна имплементация като по този начин прави възможно тяхното независимо развитие. С други думи, използването на този шаблон създава две различни йерархии, свързани чрез композиция - осигурявайки по този начин гъвкавост при необходимост от разширение. Изпълнението на модела на проектиране на моста следва идеята за предпочитане на композицията пред наследяването.

Шаблонът е демонстриран чрез пример с интерфейси Shape и Color, където двата интерфейса се имплементират от няколко класа.

Важно е да се отбележи, че класовете, имплементиращи интерфейса 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 може да се използва когато както абстракцията, така и имплементацията могат да имат различни йерархии независимо и е необходимо скриването на имплементацията от клиентското приложение.


This site uses Just the Docs, a documentation theme for Jekyll.