Поиск по сайту:

Шаблон проектирования моста в 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.

Шаблон проектирования моста можно использовать, когда и абстракция, и реализация могут независимо иметь разные иерархии, и мы хотим скрыть реализацию от клиентского приложения.