定義
橋接(Bridge)是用于把抽象化與實(shí)現(xiàn)化解耦,使得二者可以獨(dú)立變化励稳。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式佃乘,它通過提供抽象化和實(shí)現(xiàn)化之間的橋接結(jié)構(gòu),來實(shí)現(xiàn)二者的解耦驹尼。
這種模式涉及到一個(gè)作為橋接的接口趣避,使得實(shí)體類的功能獨(dú)立于接口實(shí)現(xiàn)類。這兩種類型的類可被結(jié)構(gòu)化改變而互不影響新翎。
我們通過下面的實(shí)例來演示橋接模式(Bridge Pattern)的用法程帕。其中,可以使用相同的抽象類方法但是不同的橋接實(shí)現(xiàn)類地啰,來畫出不同顏色的圓愁拭。
實(shí)現(xiàn)
我們有一個(gè)作為橋接實(shí)現(xiàn)的 DrawAPI 接口和實(shí)現(xiàn)了 DrawAPI 接口的實(shí)體類 RedCircle、GreenCircle亏吝。Shape 是一個(gè)抽象類岭埠,將使用 DrawAPI 的對(duì)象。BridgePatternDemo蔚鸥,我們的演示類使用 Shape 類來畫出不同顏色的圓惜论。
步驟 1
創(chuàng)建橋接實(shí)現(xiàn)接口。
DrawAPI.java
public interface DrawAPI {
public void drawCircle(int radius, int x, int y);
}
步驟 2
創(chuàng)建實(shí)現(xiàn)了 DrawAPI 接口的實(shí)體橋接實(shí)現(xiàn)類止喷。
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 +"]");
}
}
步驟 3
使用 DrawAPI 接口創(chuàng)建抽象類 Shape馆类。
Shape.java
public abstract class Shape {
protected DrawAPI drawAPI;
protected Shape(DrawAPI drawAPI){
this.drawAPI = drawAPI;
}
public abstract void draw();
}
步驟 4
創(chuàng)建實(shí)現(xiàn)了 Shape 接口的實(shí)體類。
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);
}
}
步驟 5
使用 Shape 和 DrawAPI 類畫出不同顏色的圓弹谁。
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();
}
}
步驟 6
驗(yàn)證輸出乾巧。
Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[ color: green, radius: 10, x: 100, 100]