在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。
桥接模式将抽象部分与它的实现部分分离开来,使他们都可以独立变化,它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
下面我们就通过桥接模式来创建不同颜色不同形状的图形。
桥接模式的实现:
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(); //画彩色的三角形
}
}