Рубрики
Без рубрики

Шаблон проектирования моста в Java

Шаблон проектирования моста на Java. Пример учебника по Java-образцу Моста. Схема классов шаблонов проектирования мостов, диаграмма UML, исходный код, Структурный шаблон.

Автор оригинала: 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.

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