【Java 设计模式 · 结构型】桥接模式(Bridge Pattern)
2023-09-27 14:22:51 时间
结构型模式关注如何将现有类或对象组织一起形成更加强大的结构。
一、概述
桥接模式(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");
}
}
四、特点
☯ 优点
- 分离抽象接口、实现部分
- 可以取代多层继承方案
- 提高系统可扩展性
☯ 缺点
- 增加系统理解、设计难度
- 需要靠经验正确识别两个独立的维度
相关文章
- 【一看就会的Java设计模式教程】- 观察者模式
- java设计模式--结构型模式--组合模式
- java设计模式--结构型模式--代理模式
- java设计模式--行为型模式--状态模式
- Java设计模式-中介者模式(Mediator)
- Java设计模式-备忘录模式(Memento)
- Java设计模式-模板方法模式(Template Method)
- 【Java 设计模式 · 创建型】浅拷贝 & 深拷贝、原型模式(Prototype Pattern)
- 【Java 设计模式 · 创建型】工厂模式(Factory Pattern)、抽象工厂模式(Abstract Factory Pattern)
- java设计模式---原型模式
- java设计模式----享元模式
- java设计模式----桥接模式
- Java设计模式(18)——行为模式之迭代子模式(Iterator)
- Java设计模式(11)——结构型模式之享元模式(Flyweight)
- Java设计模式(4)——创建型模式之单例模式(Singleton)
- JAVA 设计模式 备忘录模式
- JAVA 设计模式 享元模式
- JAVA 设计模式 桥接模式
- JAVA设计模式之【单例模式】
- 详解23种设计模式(基于Java)—— 创建者模式(二 / 五)
- 【每天一个java设计模式(一)】 - 工厂模式
- JAVA设计模式实战---工厂模式!!!
- JAVA设计模式之单例模式
- JAVA设计模式——第 4 章 多例模式【Multition Pattern】(转)
- java 在观察者模式中使用泛型T
- java入门基础