什么是桥接模式?
我理解的是类似现实中的桥梁作用,两个对象之间搭建一种桥梁,近以达到互相连接的作用。对象之间一般使用组合的方式。
但是,教科书版的定义如下,较抽象:
将抽象与实现分离,使它们都可以独立地变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
适用场景
对象据有两个以上的维度的变化,将某一维度抽象出来,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。
代码实现
示例:几何图形有形状和颜色两个维度,如何实现不同颜色不同形状的几何图形?
- 使用继承,m种形状n种颜色共计会产生m*n种类,实现复杂,不利用后期修改和维护
- 使用组合,只需m+n种类定义即可,这种组合方式就是桥接模式
// 实现不同形状 不同颜色的 几何图形import com.sun.org.apache.bcel.internal.generic.NEW;/*** 颜色*/interface Color {//涂色public void color(String shape);}//具体的各种颜色/*** 红色*/class RedColor implements Color {@Overridepublic void color(String shape) {System.out.println("红色的"+shape);}}/*** 绿色*/class GreenColor implements Color {@Overridepublic void color(String shape) {System.out.println("绿色的"+shape);}}/*** 形状*/abstract class Shape {protected Color color;public void setColor(Color color) {this.color = color;}public abstract void draw();}//各种具体的形状/*** 矩形*/class Rectangle extends Shape{@Overridepublic void draw() {this.color.color("矩形");}}/*** 圆形*/class Circular extends Shape{@Overridepublic void draw() {this.color.color("圆形");}}/*** 桥接模式测试*/public class BridgePattern {public static void main(String[] args) {//红色Color red = new RedColor();//绿色Color green = new GreenColor();//矩形Shape rectangle = new Rectangle();//圆形Shape circular = new Circular();//红色的矩形rectangle.setColor(red);rectangle.draw();//绿色的圆形circular.setColor(green);circular.draw();//输出://红色的矩形//绿色的圆形}}
