定义
Bridge Pattern:将抽象部分与其实现部分分离,使它们都可以独立地变化,它是一种对象结构型模式。
它是为了解决采用多层继承的结构使系统中类的个数急剧增加的问题。
分层思想无疑是极为先进的,而采用普通的多层继承结构在某些情况下是不够的,它没有贯彻将乘法变为加法。而桥接模式使用抽象、接口、关联、继承、实现等手段实现了真正的分层处理。对某一维度进行变化不必修改另一个维度的代码,方便拓展。
UML示例
代码示例
// 像素矩阵类:辅助类,各种格式的图片最终都被转换为像素矩阵。
public class Matrix {
}
// 抽象图像类
abstract class Image {
protected ImageImp imp;
public void setImageImp(ImageImp imp){
this.imp = imp;
}
public abstract void parseFile(String filename);
}
// 抽象操作系统实现类:实现类接口
public interface ImageImp {
// 显示像素矩阵,不同操作系统的具体实现不同。
public void doPaint(Matrix m);
}
// linux 系统实现类
public class LinuxImp implements ImageImp {
public void doPaint(Matrix m) {
System.out.println("在Linux操作系统中显示图像:");
}
}
public class WindowsImp implements ImageImp{
public void doPaint(Matrix m){
// 调用windows绘制函数绘制像素矩阵
System.out.println("在Windows操作系统中显示图像:");
}
}
// PNG格式图像:扩充抽象类
public class PNGImage extends Image{
public void parseFile(String filename) {
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(filename + ",格式为PNG");
}
}
public class JPGImage extends Image{
public void parseFile(String filename) {
// 模拟解析Jpg文件,并获得一个像素矩阵对象m
Matrix m = new Matrix();
imp.doPaint(m);
System.out.println(filename + ", 格式为JPG");
}
}
public class Client {
public static void main(String[] args) {
// 设置文件格式 jpg
Image image = new JPGImage();
// 设置 所在系统
ImageImp imp = new WindowsImp();
// 桥接
image.setImageImp(imp);
// 解析文件
image.parseFile("小龙女");
}
输出:
在Windows操作系统中显示图像:
小龙女, 格式为JPG