【Java 设计模式 · 结构型】桥接模式(Bridge Pattern)

结构型模式关注如何将现有类或对象组织一起形成更加强大的结构。

一、概述

桥接模式(Bridge Pattern):将抽象部分与它的实现部分解耦,使得两者都能够独立变化。

桥接模式又称柄体(Handle and Body)模式 或 接口(Interface)模式。它用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代多层继承。

二、结构

桥接模式

  • Abstraction(抽象类):
    定义抽象类的接口,通常为抽象类,其中定义 Implementor(实现类接口)类型的对象并可维护该对象,他们具有关联关系。
  • RefinedAbstraction(扩充抽象类):
    扩充 Abstraction 的定义,通常它是具体类,实现抽象业务方法。
  • Implementor(实现类接口):
    定义实现类的接口,不一定与 Abstraction 一致,它们可以完全不同,通过关联关系代替继承关系。
  • ConcreteImplementor(具体实现类):
    Implementor 的具体实现,不同实现类提供不同的实现。

三、举例

某公司开发跨平台图片浏览系统,能够显示BMP、JPG、GIF、PNG等多种 格式的文件,现使用桥接模式,对系统做抽象概述。

系统类图:
系统类图

Matrix 像素矩阵类:辅助类

public class Matrix {
    //代码省略
}

ImageImpl 抽象平台类:充当实现类接口

public interface ImageImpl {
    public void doPaint(Matrix matrix);  //显示图片方法
}

PlatformAImpl 平台A类:充当具体实现类

public class PlatformAImpl implements ImageImpl {
    @Override
    public void doPaint(Matrix matrix) {
        //模拟平台A绘制像素矩阵
        System.out.println("在 平台A 显示图像:");
    }
}

PlatformBImpl 平台B类:充当具体实现类

public class PlatformBImpl implements ImageImpl {
    @Override
    public void doPaint(Matrix matrix) {
        //模拟平台B绘制像素矩阵
        System.out.println("在 平台B 显示图像:");
    }
}

PlatformCImpl 平台C类:充当具体实现类

public class PlatformCImpl implements ImageImpl {
    @Override
    public void doPaint(Matrix matrix) {
        //模拟平台C绘制像素矩阵
        System.out.println("在 平台C 显示图像:");
    }
}

Image 图像类:充当抽象类

public abstract class Image {
    protected ImageImpl imp;
    //注入实现类接口对象
    public void setImageImp(ImageImpl imp){
        this.imp = imp;
    }

    public abstract void parseFile(String fileName);
}

JPGImage JPG图像类:充当扩充抽象类

public class JPGImage extends Image{
	//实现解析方法
    @Override
    public void parseFile(String fileName) {
        //模拟解析JPG文件,并获得像素矩阵对象m
        Matrix m = new Matrix();
        imp.doPaint(m);
        System.out.println(fileName + ",格式为 JPG");
    }
}

PNGImage PNG图像类:充当扩充抽象类

public class PNGImage extends Image{
	//实现解析方法
    @Override
    public void parseFile(String fileName) {
        //模拟解析PNG文件,并获得像素矩阵对象m
        Matrix m = new Matrix();
        imp.doPaint(m);
        System.out.println(fileName + ",格式为 PNG");
    }
}

BMPImage BMP图像类:充当扩充抽象类

public class BMPImage extends Image{
	//实现解析方法
    @Override
    public void parseFile(String fileName) {
        //模拟解析BMP文件,并获得像素矩阵对象m
        Matrix m = new Matrix();
        imp.doPaint(m);
        System.out.println(fileName + ",格式为 BMP");
    }
}

GIFImage GIF图像类:充当扩充抽象类

public class GIFImage extends Image{
	//实现解析方法
    @Override
    public void parseFile(String fileName) {
        //模拟解析GIF文件,并获得像素矩阵对象m
        Matrix m = new Matrix();
        imp.doPaint(m);
        System.out.println(fileName + ",格式为 GIF");
    }
}

四、特点

☯ 优点

  • 分离抽象接口、实现部分
  • 可以取代多层继承方案
  • 提高系统可扩展性

☯ 缺点

  • 增加系统理解、设计难度
  • 需要靠经验正确识别两个独立的维度
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值