设计模式学习(八):桥接模式

设计模式,学习,桥接,模式 · 浏览次数 : 97

小编点评

## Bridge Pattern Learning The Bridge Pattern is a structural design pattern that separates the abstract part and the concrete part of an object. This allows them to be changed independently, making it easier to maintain and modify. **Here's how the Bridge Pattern works:** * Define an abstract class `Gift` with a `protected` field `impl` for the concrete implementation. * Define concrete subclasses `WarmGift` and `GiftImpl` that implement the `Gift` interface. * Use the `Bridge` class to hold a reference to the concrete object. * Implement the `chase` method in the `GG` class that sends a book and a flower to MM. **Benefits of using the Bridge Pattern:** * **Abstraction:** Allows you to change the concrete implementation without affecting the abstract behavior. * **Reusability:** Different concrete implementations can be used interchangeably. * **Maintainability:** Changes to the concrete implementation only affect specific objects. **UML and code UML diagram:** ``` [Abstract class Gift] +-----------------+ | protected field | +-----------------+ | impl (concrete impl) | [Concrete subclass WarmGift] +-----------------+ | field = new Flower() | +-----------------+ [Concrete subclass GiftImpl] +-----------------+ | field = new Book() | +-----------------+ ``` **This pattern is often used with the Mediator Pattern to provide a flexible way to connect different objects.** **Here are some real-world applications of the Bridge Pattern:** * **JDBC Driver:** The Bridge Pattern is used by JDBC to provide different implementations of the `Driver` interface for the same database. * **Inheritance:** In object-oriented programming, bridges can be used to implement polymorphism by providing different implementations for a single abstract class. **Overall, the Bridge Pattern is a powerful design pattern that can be used to achieve separation of concerns and maintainable object-oriented code.**

正文

设计模式学习(八):桥接模式

作者:Grey

原文地址:

博客园:设计模式学习(八):桥接模式

CSDN:设计模式学习(八):桥接模式

桥接模式

桥接模式是一种结构型模式。它将抽象部分和实现部分分离,使他们可以独立地变化。

使用桥接模式,可以将抽象和具体的发展单独分支(即:抽象中持有一个具体的引用)

举例说明:

GG 在追 MM 的时候,可以送书和花两种礼物

public class GG {
    public void chase(MM mm) {
        Gift g = new WarmGift(new Flower());
        give(mm, g);
    }

    public void give(MM mm, Gift g) {
        System.out.println(g + "gived!");
    }
}

public abstract class Gift {
    protected GiftImpl impl;
}

public class WarmGift extends Gift {
    public WarmGift(GiftImpl impl) {
        this.impl = impl;
    }
}

public class GiftImpl {}

public class Flower extends GiftImpl {}

如上代码,礼物 Flower 被包装成了一个 WarmGift 送给 MM ,WarmGift 和 WildGift 都是 Gift 的一种抽象,Flower 和 Book 都算 Gift 的一种具体实现,

我们让 Gift 这个抽象类中,持有一个 GiftImpl 的引用

UML示例图如下:

image

如果说代理模式是一个类与另一个类的组合,那么桥接模式是一组类和另外一组类的组合。

桥接模式的应用

JDBC 驱动配置

当我们把具体的 Driver 实现类(比如: com.mysql.jdbc.Driver)注册到 DriverManager 之后,后续所有对 JDBC 接口的调用,都会委派到对具体的 Driver 实现类来执行。而 Driver 实现类都实现了相同的接口(java.sql.Driver),这也是可以灵活切换 Driver 的原因。

UML 和 代码

UML 图

代码

更多

设计模式学习专栏

参考资料

与设计模式学习(八):桥接模式相似的内容:

设计模式学习(八):桥接模式

设计模式学习(八):桥接模式 作者:Grey 原文地址: 博客园:设计模式学习(八):桥接模式 CSDN:设计模式学习(八):桥接模式 桥接模式 桥接模式是一种结构型模式。它将抽象部分和实现部分分离,使他们可以独立地变化。 使用桥接模式,可以将抽象和具体的发展单独分支(即:抽象中持有一个具体的引用)

设计模式学习(二)工厂模式——抽象工厂模式+注册表

目录前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用简单工厂改进 对于缺点①,我们可以使用简单工厂的思路来改进抽象工厂的初版代码。对于上一篇文章中的例子,我们去除Came

设计模式学习(二)工厂模式——抽象工厂模式

目录背景抽象工厂模式优点与缺点参考文章 背景 现在我需要开发一个相机操作模块,它可能在Windows下运行,也可能在Linux下运行。由于在厂家提供的SDK中,Windows下的SDK和Linux下的SDK是有区别的,因此对于一个品牌的相机,我们要创建两个类去封装这两个不同平台下的API。 我们先使

设计模式学习(二)工厂模式——工厂方法模式+注册表

目录工厂方法模式的瑕疵注册表 工厂方法模式的瑕疵 在前一篇笔记中我们介绍了工厂方法模式,示例的类图如下: 考虑一种情况:现在要在程序运行时,根据外部资源,动态的实例化对象。也就是说在编译期我们无法知道要实例化的对象的类型。因此在实例化的过程中,就需要加以判断。 例如,在我的例子中,要根据连接到主机的

设计模式学习(二):单例模式

设计模式学习(二):单例模式 作者:Grey 原文地址: 博客园:设计模式学习(二):单例模式 CSDN:设计模式学习(二):单例模式 单例模式 单例模式是创建型模式。 单例的定义:“一个类只允许创建唯一一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。”定

设计模式学习(三):工厂模式

设计模式学习(三):工厂模式 作者:Grey 原文地址: 博客园:设计模式学习(三):工厂模式 CSDN:设计模式学习(三):工厂模式 工厂模式 工厂模式是创建型模式,工厂模式分为:简单工厂,工厂方法和抽象工厂三种类型。 简单工厂 这个模式很简单,比如我们需要制造不同类型的鼠标,我们只需要创建一个鼠

设计模式学习(四):建造者模式

设计模式学习(四):建造者模式 作者:Grey 原文地址: 博客园:设计模式学习(四):建造者模式 CSDN:设计模式学习(四):建造者模式 建造者模式 建造者模式是创建型模式。 我们在对一个实体类进行属性的 get 或 set 的时候,可以通过封装一些常用的构造方法来简化实体类的构造。 比如 Ef

设计模式学习(五):原型模式

设计模式学习(五):原型模式 作者:Grey 原文地址: 博客园:设计模式学习(五):原型模式 CSDN:设计模式学习(五):原型模式 原型模式 原型模式是创建型模式。 如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段的值都相同),在这种情况下,我们可以利用对已有对象(原型)进

设计模式学习(六):代理模式

设计模式学习(六):代理模式 作者:Grey 原文地址: 博客园:设计模式学习(六):代理模式 CSDN:设计模式学习(六):代理模式 代理模式 代理模式是结构型模式,分为静态代理和动态代理。 静态代理 举个例子,假设需要在某个类的某段代码的前后加上日志记录,就可以通过静态代理的方式实现,代码如下

设计模式学习(七):适配器模式

设计模式学习(七):适配器模式 作者:Grey 原文地址: 博客园:设计模式学习(七):适配器模式 CSDN:设计模式学习(七):适配器模式 适配器模式 适配器模式是一种结构型模式。 举例说明,假设有一个播放器,需要根据不同格式以及对应的文件来播放,接口设计如下: public interface