1 简介
桥接模式(Bridge Pattern)定义:将抽象部分(Abstraction)与它的实现部分(Implementor)分离,使得它们可以独立的变化。
当事物存在两个独立变化的纬度时,将两个变化因素抽取出来形成高层次的关联关系,使原本复杂的类继承结构变得相对简单,极大减少系统中类的个数。
假如要绘制三角形、正方形、圆形3种形状的图形,每个图形包含红色、绿色、蓝色3种颜色,此时有如下两种方案:
方案一:

该方案采用多级继承结构,如果需要增加一个新的形状,并且也需要具有3种颜色,则需要增加3个类;如果增加一种新的颜色,则每种形状都需要增加该颜色。因此,该设计方案可能会造成类个数急剧增加(类爆炸)。
方案二:

该方案降低了图形类与颜色类的耦合,减少了代码编写量。
2 代码
(1)颜色(Color)
public interface Color {
public void paint(String type);
}
public class Red implements Color{
@Override
public void paint(String type) {
System.out.println("绘制红色的"+type);
}
}
public class Green implements Color{
@Override
public void paint(String type) {
System.out.println("绘制绿色的"+type);
}
}
public class Blue implements Color{
@Override
public void paint(String type) {
System.out.println("绘制蓝色的"+type);
}
}
(2)图形(Graph)
public abstract class Graph {
protected Color color;
public void setColor(Color color) {
this.color=color;
}
public abstract void draw();
}
public class Triangle extends Graph{
@Override
public void draw() {
color.paint("三角形");
}
}
public class Square extends Graph{
@Override
public void draw() {
color.paint("正方形");
}
}
public class Circle extends Graph{
@Override
public void draw() {
color.paint("圆形");
}
}
(3)客户端(Client)
public class Client {
public static void main(String[] args) {
Graph graph1=new Triangle();
Graph graph2=new Square();
Graph graph3=new Circle();
Color red=new Red();
Color green=new Green();
Color blue=new Blue();
graph1.setColor(red);
graph2.setColor(green);
graph3.setColor(blue);
graph1.draw();
graph2.draw();
graph3.draw();
}
}