设计模式完结(7)--桥接模式----处理多维度变化
处理多维度变化——桥接模式
多维 + 变化 ------拆 + 关联
桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联,该关联关系类似一条连接两个独立继承结构的桥,故名桥接模式。
abstract class Abstraction { protected Implementor impl; //定义实现类接口对象 可见性定义为protected,以便在其子类中访问Implementor的方法 public void setImpl(Implementor impl) { this.impl=impl; } public abstract void operation(); //声明抽象业务方法 }
//像素矩阵类:辅助类,各种格式的文件最终都被转化为像素矩阵,不同的操作系统提供不同的方式显示像素矩阵 class Matrix { //此处代码省略 } //抽象图像类:抽象类 abstract class Image { protected ImageImp imp; public void setImageImp(ImageImp imp) { this.imp = imp; } public abstract void parseFile(String fileName); } //抽象操作系统实现类:实现类接口 interface ImageImp { public void doPaint(Matrix m); //显示像素矩阵m } //Windows操作系统实现类:具体实现类 class WindowsImp implements ImageImp { public void doPaint(Matrix m) { //调用Windows系统的绘制函数绘制像素矩阵 System.out.print("在Windows操作系统中显示图像:"); } } //Linux操作系统实现类:具体实现类 class LinuxImp implements ImageImp { public void doPaint(Matrix m) { //调用Linux系统的绘制函数绘制像素矩阵 System.out.print("在Linux操作系统中显示图像:"); } } //Unix操作系统实现类:具体实现类 class UnixImp implements ImageImp { public void doPaint(Matrix m) { //调用Unix系统的绘制函数绘制像素矩阵 System.out.print("在Unix操作系统中显示图像:"); } } //JPG格式图像:扩充抽象类 class JPGImage extends Image { public void parseFile(String fileName) { //模拟解析JPG文件并获得一个像素矩阵对象m; Matrix m = new Matrix(); imp.doPaint(m); System.out.println(fileName + ",格式为JPG。"); } } //PNG格式图像:扩充抽象类 class PNGImage extends Image { public void parseFile(String fileName) { //模拟解析PNG文件并获得一个像素矩阵对象m; Matrix m = new Matrix(); imp.doPaint(m); System.out.println(fileName + ",格式为PNG。"); } } //BMP格式图像:扩充抽象类 class BMPImage extends Image { public void parseFile(String fileName) { //模拟解析BMP文件并获得一个像素矩阵对象m; Matrix m = new Matrix(); imp.doPaint(m); System.out.println(fileName + ",格式为BMP。"); } } //GIF格式图像:扩充抽象类 class GIFImage extends Image { public void parseFile(String fileName) { //模拟解析GIF文件并获得一个像素矩阵对象m; Matrix m = new Matrix(); imp.doPaint(m); System.out.println(fileName + ",格式为GIF。"); } }