在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。

桥接模式将抽象部分与它的实现部分分离开来,使他们都可以独立变化,它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

下面我们就通过桥接模式来创建不同颜色不同形状的图形。

桥接模式的实现:

1. 创建一个颜色接口

//颜色接口
public interface Color {
//对传入的图形上色
public void colorByShape();
}

2. 创建三种颜色

//红色
public class Red implements Color {
@Override
public void colorByShape() {
System.out.print("红色的");
}
}
//绿色
public class Green implements Color {
@Override
public void colorByShape() {
System.out.print("绿色的");
}
}
//彩色
public class Rainbow implements Color {
@Override
public void colorByShape() {
System.out.print("彩色的");
}
}

3. 创建形状抽象类

//形状抽象类
public abstract class Shape {
Color color;

public abstract void draw(); //画形状

public void setColor(Color color) {
this.color = color;
}
}

4. 创建三种具体的形状

//圆形
public class Circle extends Shape {
@Override
public void draw() {
this.color.colorByShape();
System.out.println("圆形的");
}
}
//三角形
public class Triangle extends Shape {
@Override
public void draw() {
this.color.colorByShape();
System.out.println("三角形的");
}
}
//矩形
public class Rectangle extends Shape {
@Override
public void draw() {
this.color.colorByShape();
System.out.println("矩形的");
}
}

5. 给形状上颜色(桥接)

public class BridgeMain {
public static void main(String[] args) {
Color red = new Red(); //红色
Shape circle = new Circle(); //圆形
circle.setColor(red);
circle.draw(); //画红色的圆形

Color rainbow = new Rainbow(); //彩色
Shape triangle = new Triangle(); //三角形
triangle.setColor(rainbow);
triangle.draw(); //画彩色的三角形
}
}

【每天一个java设计模式(八)】 - 桥接模式_java