设计模式之桥接模式

简介: 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化,而不会直接影响到其他部分。是一种对象结构型模式,又称接口(interface)模式。

0x01:桥接模式简介


桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化,而不会直接影响到其他部分。是一种对象结构型模式,又称接口(interface)模式。UML类图如下:


微信图片_20220502091804.png


主要角色如下:


Implementor:实现化角色,它是接口或者抽象类,定义角色必需的行为和属性;这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般而言,Implementor接口仅提供基本操作,而Abstraction定义的接口可能会做更多更复杂的操作。Implementor接口对这些基本操作进行了声明,而具体实现交给其子类。通过关联关系,Abstraction不仅拥有自己的方法,还可以调用Implementor中定义的方法,使用关联关系来替代继承关系;


ConcreteImplementor:具体实现化角色,实现接口或抽象类定义的方法或属性。在不同的ConcreteImplementor中提供基本操作的不同实现,在程序运行时,ConcreteImplementor对象将替换其父类对象,提供给抽象类具体的业务操作方法;


Abstraction:抽象化角色,定义出该角色的行为,同时保存一个对实现化角色的引用;它一般是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法;


RefinedAbstraction:扩充抽象类角色,引用实现化角色对抽象化角色进行扩充。通常情况下,它不再是抽象类而是具体类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法;


0x02:桥接模式典型实现


Implementor抽象类


public abstract class Implementor {
public abstract void operatorA();
public abstract void operatorB();
 }


ConcreteImplementor:这里可以编写多个具体实现类


public class ConcreteImplementorA extends Implementor {
@Override
    public void operatorA() {
System.out.println("具体实现ConcreteImplementorA的operatorA执行");
    }
@Override
    public void operatorB() {
System.out.println("具体实现ConcreteImplementorA的operatorB执行");
    }
}
public class ConcreteImplementorB extends Implementor {
@Override
    public void operatorA() {
System.out.println("具体实现ConcreteImplementorB的operatorA执行");
    }
@Override
    public void operatorB() {
System.out.println("具体实现ConcreteImplementorB的operatorB执行");
    }
}


Abstraction抽象类


public abstract class Abstraction {
private Implementor implementor;
//约束子类必须实现该构造函数
public Abstraction(Implementor implementor) {
this.implementor = implementor;
    }
public Implementor getImplementor() {
return implementor;
    }
//自身的行为和属性
public void request() {
//TODO 可以添加操作
    }
}


RefinedAbstraction


public class RefinedAbstraction extends Abstraction {
//覆写构造函数
    public RefinedAbstraction(Implementor implementor) {
super(implementor);
    }
//修正父类行为
@Override
    public void request() {
super.request();
super.getImplementor().operatorA();
    }
}


桥接模式测试代码


public class Client {
public static void main(String[] args) {
Implementor implementor1 = new ConcreteImplementorA();
Abstraction abstraction1 = new RefinedAbstraction(Implementor1);
        abstraction1.request();
Implementor implementor2 = new ConcreteImplementorB();
Abstraction abstraction2 = new RefinedAbstraction(Implementor2);
        abstraction2.request();
    }
}


0x03:桥接模式的应用场景


因为桥接模式又称接口模式,所以可以理解为提供一个标准接口,然后多种实现。这种场景在项目开发中,在普遍不过了。


  • 预警系统的信息处理方式


一般预警系统都提供了消息通知的功能,而消息通知的渠道多种多样,主要有站内消息、邮件消息和短信消息。


  • 多厂商对接


在做项目时,经常遇到一个同样的功能对接多个厂商的情况。这种情况普遍存在设备对接的项目中,之前小编在做柜面系统时,经常遇到刷卡器、身份证读取器等设备同时对接多个厂商的情况。


  • 日志框架


java领域的日志框架,接口定义与具体实现框架。常常也是基于桥接模式实现适配使用的。


桥接模式的使用场景


  • 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展;


  • 不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统 ;


  • 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系;
相关文章
|
4月前
|
设计模式 开发者
【设计模式】第七篇:和我一起简单认识桥接模式
实现的意思并不是指抽象的派生类,而是指通过组合来代替继承关系,从而降低抽象和具体实现产品两个可变换维度之间的耦合,就像我们的相机品牌和相机产品类型之间的分离
48 4
|
5月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
【设计模式】JAVA Design Patterns——Bridge(桥接模式)
|
5月前
|
设计模式 Oracle Java
设计模式--- 桥接模式、JDBC 源码剖析(桥接)
设计模式--- 桥接模式、JDBC 源码剖析(桥接)
110 2
|
5月前
|
设计模式
设计模式之桥接模式
设计模式之桥接模式
|
5月前
|
设计模式 Linux Windows
【设计模式】桥接模式
【设计模式】桥接模式
|
6天前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
1月前
|
设计模式 自然语言处理 算法
PHP中的设计模式:桥接模式的深入探索与应用
在PHP开发中,理解并运用设计模式是提升代码质量与可维护性的关键。本文聚焦于桥接模式——一种结构型设计模式,它通过封装一个抽象的接口,将实现与抽象分离,从而使得它们可以独立变化。不同于传统摘要的概述式表述,本文将以故事化的情境引入,逐步解析桥接模式的精髓,通过PHP代码示例详细展示其在实际项目中的应用,旨在为读者提供一个既深刻又易于理解的学习体验。
21 1
|
1月前
|
设计模式 Java
Java设计模式-桥接模式(9)
Java设计模式-桥接模式(9)
|
16天前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
32 0
|
2月前
|
设计模式 XML 存储
【七】设计模式~~~结构型模式~~~桥接模式(Java)
文章详细介绍了桥接模式(Bridge Pattern),这是一种对象结构型模式,用于将抽象部分与实现部分分离,使它们可以独立地变化。通过实际的软件开发案例,如跨平台视频播放器的设计,文章阐述了桥接模式的动机、定义、结构、优点、缺点以及适用场景,并提供了完整的代码实现和测试结果。桥接模式适用于存在两个独立变化维度的系统,可以提高系统的可扩展性和灵活性。
【七】设计模式~~~结构型模式~~~桥接模式(Java)