设计模式-行为模式-桥接模式(Design_Pattern

桥接模式( )
核心:处理多层继承结构 , 处理多维度变化的场景 , 将各个维度设计成独立的继承结构 , 使各个维度可以独立的扩展在抽象层建立关联 。
总结:

设计模式-行为模式-桥接模式(Design_Pattern

文章插图
桥接模式可以取代多层继承的方案 。多层继承违背了单一指责原则 , 复用性较差 , 类的个数也非常多 。桥接模式可以极大的减少子类的数量 , 从而降低管理和维护的成本 。
桥接模式极大的提高了系统的可扩展性 , 在两个变化维度中任意扩展一个维度 , 都不需要修改原有的系统 , 符合开闭原则 。
就像一座桥 , 将两个变化维度连接起来 , 各个维度都可以独立的变化 , 故称之为:桥模式 。
/*** @author Satsuki* @time 2019/8/13 17:42* @description:在实现Implementor接口的子类中实现了在该接口中声明的方法 , * 用于定义与该维度相对应的一些具体方法 。*/public interface Implementor {public void operationImpl();}public class ConcreteImplementor implements Implementor {@Overridepublic void operationImpl() {//具体业务方法的实现}}/*** @author Satsuki* @time 2019/8/13 17:43* @description:对于另一“抽象部分”维度而言 , 其典型的抽象类代码如下所示:*/public abstract class Abstraction {//定义实现类的抽象接口给protected Implementor impl;public Abstraction(Implementor impl) {this.impl = impl;}public abstract void operation();}/*** @author Satsuki* @time 2019/8/13 17:45* @description:* 在抽象类Abstraction中定义了一个实现类接口类型的成员对象impl , * 再通过注入的方式给该对象赋值 , 一般将该对象的可见性定义为protected , * 以便在其子类中访问Implementor的方法 , * 其子类一般称为扩充抽象类或细化抽象类(RefinedAbstraction) , * 典型的RefinedAbstraction类代码如下所示:*/public class RefinedAbstraction extends Abstraction {public RefinedAbstraction(Implementor impl) {super(impl);}@Overridepublic void operation() {//业务代码//调用实现类的方法impl.operationImpl();//业务代码}}
【设计模式-行为模式-桥接模式(Design_Pattern】/*** @author Satsuki* @time 2019/8/13 17:52* @description:* 抽象操作系统实现类:实现类接口*/public interface ImageImp {//显示像素矩阵mpublic void doPaint(Matrix m);}/*** @author Satsuki* @time 2019/8/13 17:54* @description:* Windows操作系统实现类:具体实现类*/public class WindowImp implements ImageImp {@Overridepublic void doPaint(Matrix m) {//调用Windows系统的绘制函数绘制像素矩阵System.out.println("在windows操作系统中显示图像");}}/*** @author Satsuki* @time 2019/8/13 17:55* @description:* //Unix操作系统实现类:具体实现类*/public class UnixImp implements ImageImp {public void doPaint(Matrix m) {//调用Unix系统的绘制函数绘制像素矩阵System.out.print("在Unix操作系统中显示图像:");}}/*** @author Satsuki* @time 2019/8/13 17:54* @description:* Linux操作系统实现类:具体实现类*/public class LinuxImp implements ImageImp {@Overridepublic void doPaint(Matrix m) {//调用Linux系统的绘制函数绘制像素矩阵System.out.print("在Linux操作系统中显示图像:");}}/*** @author Satsuki* @time 2019/8/13 17:51* @description:* 抽象图像类:抽象类*/public abstract class Image {protected ImageImp imageImp;public void setImageImp(ImageImp imageImp) {this.imageImp = imageImp;}public abstract void parseFile(String fileName);}/*** @author Satsuki* @time 2019/8/13 17:58* @description:* BMP格式图像:扩充抽象类*/public class BMPImage extends Image {public void parseFile(String fileName) {//模拟解析BMP文件并获得一个像素矩阵对象m;Matrix m = new Matrix();imageImp.doPaint(m);System.out.println(fileName + " , 格式为BMP 。");}}/*** @author Satsuki* @time 2019/8/13 17:58* @description:* GIF格式图像:扩充抽象类*/public class GIFImage extends Image {public void parseFile(String fileName) {//模拟解析GIF文件并获得一个像素矩阵对象m;Matrix m = new Matrix();imageImp.doPaint(m);System.out.println(fileName + " , 格式为GIF 。");}}/*** @author Satsuki* @time 2019/8/13 17:56* @description:* JPG格式图像:扩充抽象类*/public class JPGImage extends Image {@Overridepublic void setImageImp(ImageImp imageImp) {super.setImageImp(imageImp);}@Overridepublic void parseFile(String fileName) {//模拟解析JPG文件并获得一个像素矩阵对象mMatrix m = new Matrix();imageImp.doPaint(m);System.out.println(fileName+ ",格式为jpg");}}/*** @author Satsuki* @time 2019/8/13 17:57* @description:/* NG格式图像:扩充抽象类*/public class PNGImage extends Image {public void parseFile(String fileName) {//模拟解析PNG文件并获得一个像素矩阵对象m;Matrix m = new Matrix();imageImp.doPaint(m);System.out.println(fileName + " , 格式为PNG 。");}}/*** @author Satsuki* @time 2019/8/13 17:59* @description:*/public class Client {public static void main(String[] args) {Image image = new JPGImage();ImageImp imageImp = new WindowImp();image.setImageImp(imageImp);image.parseFile("satsuki");}}