结构型设计模式之桥接模式(代码片段)

jiangwj jiangwj     2022-12-06     668

关键词:

Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。

 

桥接模式的UML图如下:

技术图片

桥接模式的角色和职责:

1.Client 调用端

这是Bridge模式的调用者。

2.抽象类(Abstraction)

抽象类接口(接口这货抽象类)维护队行为实现(implementation)的引用。它的角色就是桥接类。

3.Refined Abstraction

这是Abstraction的子类。

4.Implementor

行为实现类接口(Abstraction接口定义了基于Implementor接口的更高层次的操作)

5.ConcreteImplementor

Implementor的子类

 

示例代码如下:

首先定义Implementor接口,其中定义了其实现类必须要实现的接口operation()

public interface Implementor 
     public void operation();

下面定义Implementor接口的两个实现类:

public class ConcreateImplementorA implements Implementor 
    @Override
    public void operation() 
        System.out.println("this is concreteImplementorA‘s operation...");
    
public class ConcreateImplementorB implements Implementor 
    @Override
    public void operation() 
        System.out.println("this is concreteImplementorB‘s operation...");
    

 

下面定义桥接类Abstraction,其中有对Implementor接口的引用:

public abstract class Abstraction 
    private Implementor implementor;

    public Implementor getImplementor() 
        return implementor;
    

    public void setImplementor(Implementor implementor) 
        this.implementor = implementor;
    
 
    protected void operation()
        implementor.operation();
    

下面是Abstraction类的子类RefinedAbstraction:

public class RefinedAbstraction extends Abstraction 
    @Override
    protected void operation() 
        super.getImplementor().operation();
    

下面给出测试类:

public class BridgeTest 
    public static void main(String[] args) 
        Abstraction abstraction = new RefinedAbstraction();

        //调用第一个实现类
        abstraction.setImplementor(new ConcreateImplementorA());
        abstraction.operation();
 
        //调用第二个实现类
        abstraction.setImplementor(new ConcreateImplementorB());
        abstraction.operation();

    

运行结果如下:

技术图片

这样,通过对Abstraction桥接类的调用,实现了对接口Implementor的实现类ConcreteImplementorA和ConcreteImplementorB的调用。实现了抽象与行为实现的分离。

 

总结:

1.桥接模式的优点

(1)实现了抽象和实现部分的分离

桥接模式分离了抽象部分和实现部分,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,分别定义接口,这有助于系统进行分层设计,从而产生更好的结构化系统。对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了。

(2)更好的可扩展性

由于桥接模式把抽象部分和实现部分分离了,从而分别定义接口,这就使得抽象部分和实现部分可以分别独立扩展,而不会相互影响,大大的提供了系统的可扩展性。

(3)可动态的切换实现

由于桥接模式实现了抽象和实现的分离,所以在实现桥接模式时,就可以实现动态的选择和使用具体的实现。

(4)实现细节对客户端透明,可以对用户隐藏实现细节。

2.桥接模式的缺点

(1)桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。

(2)桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围有一定的局限性。

3.桥接模式的使用场景

(1)如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。

(2)抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响,在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合。

(3)一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

(4)虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。

(5)对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用

 

设计模式之桥接模式(代码片段)

本文通过老王和小王买车,引出设计模式中的结构型设计之桥接模式,接着说明设计型模式的概念和代码实现,为了加深理解,会说明适配器设计模式在JDBC中的应用,最后谈谈桥接模式和适配器模式的总结。读者可以拉取完整... 查看详情

java设计模式之结构型:桥接模式(代码片段)

一、什么是桥接模式:        桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥。在现实生活中一个物品在搭配不同的配件... 查看详情

设计模式之桥接模式(代码片段)

...象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。... 查看详情

设计模式之桥接模式(代码片段)

...ww.cnblogs.com/lixiuyu/p/5923160.html桥接模式(Bridge)是一种结构性设计模式。Bridge模式基于类的最小原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与实现(Implementation)分离开来,从... 查看详情

设计模式之桥接模式(代码片段)

桥接模式1.简要概述2.问题引入3.模式结构4.实现代码5.优点好处6.缺点弊端7.应用场景8.应用示例1.简要概述桥接模式就是将实现和抽象放在两个不同的类层次中,也就是将抽象和实现分离开来,使它们可以独立变化。桥接... 查看详情

设计模式之桥接模式应用例题(代码片段)

设计模式之桥接模式应用例题题目描述类结构图及相关说明程序代码运行结果题目描述某手机美图APP软件支持多种不同的图像格式,例如JPG、GIF、BMP等常用图像格式,同时提供了多种不同的滤镜对图像进行处理,例如... 查看详情

设计模式之桥接模式(bridge)(代码片段)

桥接模式属于先天模式,这里的先天模式就是说一开始就要把结构搭建好,方便后来的扩展,而不是对已经出现的模块和接口进行改进扩展的。桥接的核心在于实体类和操作类之间的聚合关系,这个聚合关系就是我们所说的"桥",... 查看详情

软件设计模式及体系结构之桥接模式(代码片段)

桥接模式前言分析:蜡笔:颜色和型号两个不同的变化维度(即两个化原因)耦合在一起,无论是对颜色进行扩展还对型号进行扩展都势必会影响另一个维度毛笔:颜色和型号实现了分离,增加新的颜色或者型号对另一方没有任何影... 查看详情

java设计模式之桥接学习与掌握(代码片段)

文章目录定义优点缺点桥接模式的结构与实现模式的结构模式的实现应用场景定义将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。优点... 查看详情

设计模式之桥接模式(代码片段)

设计模式之桥接模式一、引言  每个人都有吃饭睡觉的行为,这时我们可以抽象出来一个人类型,然后让每个人去继承人类型,这时,每增加一个人,我们只需扩展一个子类就可以了,但是,人类型需要增加行为时,比如增加... 查看详情

设计模式(34)-----结构型模式-----桥接设计模式(代码片段)

...象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。... 查看详情

[设计模式c++go]结构型模式:桥接模式(代码片段)

...与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。其定义为:桥梁模式(BridgePattern)也叫做桥接模式,是一个 查看详情

小看--桥接模式(代码片段)

...) 场景提出    桥接模式是属于结构型设计模式;结构型设计模式:关注的是对象和对象之间的关系(继承和组合),结构性设计模式都是在提倡:组合优于继承。    桥接模式    学... 查看详情

结构型模式-桥接模式(代码片段)

桥接模式原文链接:https://www.cnblogs.com/adamjwh/p/9033548.html一、什么是桥接模式? 桥接模式,又叫做桥梁模式,顾名思义,就是有座“桥”,那这座桥是什么呢?就是一条聚合线(下方UML图),比如我们下面会举的例子:手机又手机... 查看详情

设计模式之桥接模式(代码片段)

设计模式之桥接模式Intro桥接模式(Bridge),将抽象部分与它的实现部分分离,使得它们都可以独立地变化。这里说到抽象与它的实现分离指的是抽象类和它的派生类用来实现自己的对象还有另外一种理解方式,一个类存在两个(... 查看详情

设计模式-结构型模式_桥接模式(代码片段)

文章目录结构型模式概述CaseBadImplBetterImpl小结结构型模式结构型模式主要是解决如何将对象和类组装成较大的结构,并同时保持结构的灵活和⾼效。结构型模式包括:适配器、桥接、组合、装饰器、外观、享元、代理ÿ... 查看详情

设计模式-结构型模式_桥接模式(代码片段)

文章目录结构型模式概述CaseBadImplBetterImpl小结结构型模式结构型模式主要是解决如何将对象和类组装成较大的结构,并同时保持结构的灵活和⾼效。结构型模式包括:适配器、桥接、组合、装饰器、外观、享元、代理ÿ... 查看详情

桥接模式(代码片段)

属于结构型模式,用于抽象与实现解耦。例如:JDBC获取数据库连接,是实现桥接模式的典型。参考:JDBC桥接代码示例publicinterfaceDrawAPIvoiddrawCircle(intradius,intx,inty);publicclassDrawBlueCircleimplementsDrawAPI@OverridepublicvoiddrawCircle(intradius, 查看详情