所谓桥接模式即为搭建中间关系的一种模式。举个网上比较流行的例子。如果我们要画一种画,需要大中小三种笔,红,蓝,黄,绿,紫五种颜色。那如果我是准备彩笔的话,我得准备多少支笔呢?我得准备3*5=15种吧。也就是大的需要准备五种颜色的笔,中的也要准备五种颜色的笔,小的也要准备五种颜色的笔。但如果我用毛笔+墨砚呢?那只需要3支笔,5种颜色的墨砚,我大的画完一种颜色,洗了,又涂抹另外一种颜色画。这样就只需要3+5=8个材料。造成第一种需要15中材料的原因是什么呢?就是因为笔本身和颜色本身耦合在一起了。这个在代码中就说明了类和其实现的功能耦合在一起了。那么为了解耦,我们只需要进行一个引用,就达到了拆分的目的。
定义一个color接口
public interface Color {
void drawColor();
}
定义其实现
public class GreenColor implements Color {
@Override
public void drawColor() {
System.out.println("我能画绿色");
}
}
public class BlackColor implements Color {
@Override
public void drawColor() {
System.out.println("我能画黑色");
}
}
public class RedColor implements Color {
@Override
public void drawColor() {
System.out.println("我能画红色.....");
}
}
定义一个笔的抽象类
在抽象类里面引用颜色接口,供实现类不同的调用方法。
public abstract class Pen {
public Color color;
public void setColor(Color color){
this.color=color;
}
public abstract void draw();
}
public class BigPen extends Pen {
@Override
public void draw() {
System.out.println("我是一支大笔");
color.drawColor();
}
}
public class MidPen extends Pen {
@Override
public void draw() {
System.out.println("我是一支中性笔");
color.drawColor();
}
}
public class SmallPen extends Pen{
@Override
public void draw() {
System.out.println("我是一支小笔");
color.drawColor();
}
}
public class MainTest {
public static void main(String[] args) {
Pen pen = new BigPen();
Color redColor = new RedColor();
Color blackColor = new BlackColor();
pen.setColor(redColor);
pen.draw();
System.out.println("............");
pen.setColor(blackColor);
pen.draw();
}
}
我是一支大笔
我能画红色.....
............
我是一支大笔
我能画黑色