I spent some time on this example of the Bridge template from wikipedia , however, I still do not understand what kind of bridge template I am trying to explain.
interface DrawingAPI {
public void drawCircle (double x, double y, double radius);
}
/ ** "ConcreteImplementor" 1/2 * /
class DrawingAPI1 implements DrawingAPI {
public void drawCircle (double x, double y, double radius) {
System.out.printf ("API1.circle at% f:% f radius% f \ n", x, y, radius);
}
}
/ ** "ConcreteImplementor" 2/2 * /
class DrawingAPI2 implements DrawingAPI {
public void drawCircle (double x, double y, double radius) {
System.out.printf ("API2.circle at% f:% f radius% f \ n", x, y, radius);
}
}
/ ** "Abstraction" * /
interface Shape {
public void draw (); // low-level
public void resizeByPercentage (double pct); // high-level
}
/ ** "Refined Abstraction" * /
class CircleShape implements Shape {
private double x, y, radius;
private DrawingAPI drawingAPI;
public CircleShape (double x, double y, double radius, DrawingAPI drawingAPI) {
this.x = x; this.y = y; this.radius = radius;
this.drawingAPI = drawingAPI;
}
// low-level ie Implementation specific
public void draw () {
drawingAPI.drawCircle (x, y, radius);
}
// high-level ie Abstraction specific
public void resizeByPercentage (double pct) {
radius * = pct;
}
}
/ ** "Client" * /
class Main {
public static void main (String [] args) {
Shape [] shapes = new Shape [2];
shapes [0] = new CircleShape (1, 2, 3, new DrawingAPI1 ());
shapes [1] = new CircleShape (5, 7, 11, new DrawingAPI2 ());
for (Shape shape: shapes) {
shape.resizeByPercentage (2.5);
shape.draw ();
}
}
}
The CircleShape constructor of the subclass takes 4 arguments; in the draw () method, the first 3 arguments are passed to the 4th argument, which can be any DrawingAPI subclass. Does this mean that using a bridge template can increase flexibility? and are there any other things that this example can tell us?
Thanks!!!!
source
share