其实刚接触桥接模式的时候,认为桥接模式和策略模式非常相似。下面是他们的uml图
可以看出非常的相似,很难说出差别。那么就举个栗子,现在画画,有3种图形,圆形、长方形、三角形。分别有3种颜色,黑白灰。那么如果采用策略模式的话,那么strategy可能就会有3*3=9个类,然后在和context进行关联,主要体现在封装了算法,达到直接调用其中一个类就能够得到相应的结果。如果是采用桥接模式的话,那么就只需要6个类,3个RefinedAbstraction类,3个implmentor类,从而达到3*3=9的效果,而桥接模式更加注重的是接口分离的一种思想。并且从类图中可以发现,桥接模式更加复杂。
1.首先设置一个图形的超类
/**
* 图形超类
*/
public abstract class Shape {
protected Color color;//颜色的引用
public void setColor(Color color) {
this.color = color;
}
public abstract void draw();
}
2.设置一个颜色的接口
public interface Color {
void say(String string);
}
3.图形的两个子类。
/**
*长方形
*/
public class Rectangle extends Shape{
@Override
public void draw() {
color.say("长方形");
}
}
/**
*圆形
*/
public class Circle extends Shape{
@Override
public void draw() {
color.say("圆形");
}
}
4.颜色的子类
public class Gray implements Color{
@Override
public void say(String string) {
System.out.println("灰色"+string);
}
}
public class Black implements Color{
@Override
public void say(String string) {
System.out.println("黑色"+string);
}
}
5.最后便是测试类。
public static void main(String[] args) {
Shape circle=new Circle();
Shape rectangle=new Rectangle();
//现在选用黑笔作画
Color black=new Black();
rectangle.setColor(black);
rectangle.draw();//输出:黑色长方形
//切换笔了 想用灰色的笔
Color gray = new Gray();
rectangle.setColor(gray);
rectangle.draw();//输出:灰色长方形
//想画圆形了
circle.setColor(black);
circle.draw();//黑色圆形
}
这就是桥接模式,总结一下,桥接模式注重于接口的隔离,从而达到解耦,而策略模式更加注重于结果。