什么是桥接模式?
我理解的是类似现实中的桥梁作用,两个对象之间搭建一种桥梁,近以达到互相连接的作用。对象之间一般使用组合的方式。
但是,教科书版的定义如下,较抽象:
将抽象与实现分离,使它们都可以独立地变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
适用场景
对象据有两个以上的维度的变化,将某一维度抽象出来,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。
代码实现
示例:几何图形有形状和颜色两个维度,如何实现不同颜色不同形状的几何图形?
- 使用继承,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 {
@Override
public void color(String shape) {
System.out.println("红色的"+shape);
}
}
/**
* 绿色
*/
class GreenColor implements Color {
@Override
public 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{
@Override
public void draw() {
this.color.color("矩形");
}
}
/**
* 圆形
*/
class Circular extends Shape{
@Override
public 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();
//输出:
//红色的矩形
//绿色的圆形
}
}