桥接模式是为了快速实现两个维度之间的变化而设计的兼容模式,这个模式的思想是: 兼顾两种维度的变化,并可以使他们能够快速组合起来;
每个维度的改变,扩展性都非常好
旨在解决多维度之间的耦合,使其维度抽象化和实现化之间解耦,并兼具两个维度的变化;
他是针对对象之间的组合,聚合
例如: 我现在有两只颜色的笔,然后要画两种形状出来; 红绿两种笔 圆形和三角形
开始编码:
红笔 红 = new 红笔();
红.draw(new 圆形());
红.draw(new 三角形());当我要用绿色也同样如此
也就是每个笔都需要实现两个方法,去根据两种形状分别画图的方法
问题在于当我加了一种形状后,就要把笔内的方法全部都加一遍,从而兼顾新的形状!!!
public interface Pen { String draw(Shape shape);
}
======================
public interface Shape {String start(String color);
}
笔的具体实现类
@Service
public class GreenPen implements Pen{@Overridepublic String draw(Shape shape) {return shape.start("绿色");}
}===============================
@Service
public class RedPen implements Pen{@Overridepublic String draw(Shape shape) {return shape.start("红色");}
}
形状的具体实现类
@Service
public class RoundShape implements Shape {@Overridepublic String start(String color) {return color + "的原型";}
}
=========================
@Service
public class TriangleShape implements Shape {@Overridepublic String start(String color) {return color + "的三角形";}
}
@SpringBootTest
class ShapeTest {@Autowiredprivate List penList;@Autowiredprivate List shapeList;@Testvoid ss(){for (Pen pen : penList) {for (Shape shape : shapeList) {System.out.println(pen.draw(shape));}}}
}
执行结果
可以看到,无论笔 或者是 颜色的增加,两个维度无论如何扩展,这种方式都可以很容易的扩展,并且快速组合到你想要的结果
public interface Pen {String draw(Shape shape);
}
笔是抽象的,入参shape 也是抽象的,不再是对象和对象之间的耦合关系,而是转为了抽象之间的关系;
这里无论是引入那种颜色的笔,只需要提供一个符合shape 的图形就够了,再也不用每种图形都要在笔中加一个方法去兼容了;
桥接模式是为了两个维度得到良好的扩展性的一种设计模式,两个维度的具体实现就是 “桥的两端”, 而抽象之间的耦合 就是这座"桥";