Design Patterns - Bridge Pattern
Bridge viene utilizzato quando è necessario disaccoppiare un'astrazione dalla sua implementazione in modo che le due possano variare indipendentemente. Questo tipo di modello di progettazione rientra nel modello strutturale poiché questo modello disaccoppia la classe di implementazione e la classe astratta fornendo una struttura a ponte tra di loro.
Questo modello coinvolge un'interfaccia che funge da ponte che rende la funzionalità delle classi concrete indipendenti dalle classi implementatrici dell'interfaccia. Entrambi i tipi di classi possono essere modificati strutturalmente senza influenzarsi a vicenda.
Stiamo dimostrando l'uso del pattern Bridge tramite il seguente esempio in cui un cerchio può essere disegnato in diversi colori usando lo stesso metodo di classe astratta ma diverse classi di implementazione del bridge.
Implementazione
Abbiamo un'interfaccia DrawAPI che funge da implementatore di bridge e classi concrete RedCircle , GreenCircle che implementano l' interfaccia DrawAPI . Shape è una classe astratta e utilizzerà l'oggetto DrawAPI . BridgePatternDemo , la nostra classe demo utilizzerà la classe Shape per disegnare cerchi colorati diversi.
Passo 1
Crea l'interfaccia per l'implementazione del bridge.
DrawAPI.java
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
Passo 2
Crea classi di implementazione di ponti in cemento che implementano l' interfaccia DrawAPI .
RedCircle.java
public class RedCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", " + y + "]");
}
}
GreenCircle.java
public class GreenCircle implements DrawAPI {
@Override
public void drawCircle(int radius, int x, int y) {
System.out.println("Drawing Circle[ color: green, radius: " + radius + ", x: " + x + ", " + y + "]");
}
}
Passaggio 3
Creare una forma di classe astratta utilizzando l' interfaccia DrawAPI .
Shape.java
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
Passaggio 4
Crea una classe concreta che implementa l' interfaccia Shape .
Circle.java
public class Circle extends Shape {
private int x, y, radius;
public Circle(int x, int y, int radius, DrawAPI drawAPI) {
super(drawAPI);
this.x = x;
this.y = y;
this.radius = radius;
}
public void draw() {
drawAPI.drawCircle(radius,x,y);
}
}
Passaggio 5
Usa le classi Shape e DrawAPI per disegnare cerchi colorati diversi.
BridgePatternDemo.java
public class BridgePatternDemo {
public static void main(String[] args) {
Shape redCircle = new Circle(100,100, 10, new RedCircle());
Shape greenCircle = new Circle(100,100, 10, new GreenCircle());
redCircle.draw();
greenCircle.draw();
}
}
Passaggio 6
Verifica l'output.
Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[ color: green, radius: 10, x: 100, 100]