Шаблон Bridge Java

Необходимо отделить абстракцию (Abstraction) от ее реализации (Implementor) так, чтобы и то и другое можно было изменять независимо. Шаблон Bridge используется в тех случаях, когда существует иерархия абстракций и соответствующая иерархия реализаций. Причем не обязательно точное соответствие между абстракциями и реализациями. Обычно абстракция определяет операции более высокого уровня, чем реализация.

clip_image002

Рис. 5.9. Пример реализации шаблона Bridge

/*пример # 18 : Implementor и его подкласс : Color.java: YellowColor.java */

package chapt05.implementor;

public abstract class Color { //implementor

public abstract void useBrush();

}

package chapt05.implementor;

public class YellowColor extends Color {

public void useBrush() {

System.out.println("BrushColor – Yellow");

}

}

Класс Color – абстрактный, реализующий Implementor. Класс
YellowColor – уточняющий подкласс класса Color.

/*пример # 19 : абстракция и ее уточнения : Shape.java : Circle.java :

Rectangle.java */

package chapt05.abstraction;

import chapt05.implementor.*;

public abstract class Shape { //abstraction

protected Color color;

public Shape (){

color = null;

}

public Color getColor() {

return color;

}

public void setColor(Color color) {

this.color = color;

}

public abstract void performWithColor();

}

package chapt05.abstraction;

import chapt05.implementor.*;

public class Circle extends Shape {

public Circle(Color color) {

setColor(color);

}

public void performWithColor() {

System.out.println("Performing in Circle class");

color.useBrush();

}

}

package chapt05.abstraction;

import chapt05.implementor.*;

public class Rectangle extends Shape {

public Rectangle(Color color) {

setColor(color);

}

public void performWithColor() {

System.out.println("Performing in Rectangle class");

color.useBrush();

}

}

Класс Shape – абстракция, классы Circle и Rectangle – уточненные абстракции.

/*пример # 20 : использование шаблона Bridge : Main.java */

package chapt05.bridge;

import chapt05.abstraction.*;

import chapt05.implementor.*;

public class Main {

public static void main(String args[]) {

YellowColor color = new YellowColor();

new Rectangle(color).performWithColor();

new Circle(color).performWithColor();

}

}

Реализация больше не имеет постоянной привязки к интерфейсу. Реализацию абстракции можно динамически изменять и конфигурировать во время выполнения. Иерархии классов Abstraction и Implementor независимы и поэтому могут иметь любое число подклассов.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100