首页 > 其他分享 >毅四捕Go设计模式笔记——桥接模式

毅四捕Go设计模式笔记——桥接模式

时间:2024-04-06 19:58:06浏览次数:18  
标签:implementor 桥接 毅四捕 模式 实现 抽象 设计模式 部分

桥接模式(Bridge Pattern)

桥接模式是一种结构型设计模式,它的主要目的是将抽象部分与它的实现部分解耦,使它们都可以独立的变化。通过使用组合而非继承的方式,桥接模式结合了两个独立的维度,让它们可以独立扩展而不是在两者之间建立静态的继承关系。

为了解决什么问题?

桥接模式解决的是抽象和实现之间的强耦合问题,使“抽象部分”和“实现部分”都可以独立的变化。

抽象和实现之间的强耦合问题:当抽象和实现具有强耦合性时,改变抽象会影响到实现,并且当各种抽象和实现混合时,系统将很难理解、扩展和维护。

两个或以上的维度变化:当一个系统有两个或者两个以上的维度在变化,如果用继承将它们组合起来,则每次变化都会导致类的爆炸式增长,并且落入到重复编码的境地。

怎么用代码实现?

为了便于理解,来看一个简单的例子,先是定义“实现部分”的接口:

/**
 * 实现部分的接口
 */
interface Implementor {
    void operationImpl();
}

假设实现部分有“A”和“B”两个具体实现:

/**
 * 实现部分的具体实现
 */
class ConcreteImplementorA implements Implementor {
    public void operationImpl() {
        System.out.println("ConcreteImplementorA Operation");
    }
}

class ConcreteImplementorB implements Implementor {
    public void operationImpl() {
        System.out.println("ConcreteImplementorB Operation");
    }
}

接着,定义“抽象部分”的抽象类:

/**
 * 抽象部分的接口
 */
abstract class Abstraction {
    protected Implementor implementor;
    
    protected Abstraction(Implementor implementor) {
        this.implementor = implementor;
    }
    
    public abstract void operation();
}

抽象部分的实现与适配器模式有些相似,主要是完成抽象部分的接口与实现部分的接口的适配:

/**
 * 抽象部分的实现
 */
class RefinedAbstraction1 extends Abstraction {
    protected RefinedAbstraction1(Implementor implementor) {
        super(implementor);
    }
    
    public void operation() {
        // 调用实现部分的接口方法
        implementor.operationImpl();
    }
}

class RefinedAbstraction2 extends Abstraction {
    protected RefinedAbstraction2(Implementor implementor) {
        super(implementor);
    }
    
    public void operation() {
        // 调用实现部分的接口方法
        implementor.operationImpl();
    }
}

最后,在客户端调用时,选择需要的抽象部分和实现部分来使用即可:

Implementor implementorA = new ConcreteImplementorA();
Abstraction abstractionA = new RefinedAbstraction1(implementorA);
abstractionA.operation();

Implementor implementorB = new ConcreteImplementorB();
Abstraction abstractionB = new RefinedAbstraction2(implementorB);
abstractionB.operation();

为什么可以解决这个问题?

桥接模式解决问题的关键在于它分离了抽象和实现两个部分,允许它们独立变化。

通过定义一个抽象接口和实现接口,不同的抽象类可以根据需要组合任何一个实现。这种分离使得每一端可以独立地扩展而不会影响到另一端,减少了类的数量,并且使复杂的继承关系变得更加灵活和简洁。

桥接模式适用于哪些场景?

建造者模式适用于系统可能有多个维度分类的情况,当每一种分类都可能变化,类的抽象以及它们的实现应当可以独立地进行改变,从而不影响客户端。

在开源项目中的也有一些使用案例:

JDBC: Java的JDBC API提供了一个很好的例子,其中DriverManager是抽象部分,而实际数据库提供的驱动(如MySQL, SQLite等)是实现部分。客户端代码可以通过JDBC的统一接口进行编程,而不依赖于具体的数据库实现。
ORM框架:如Hibernate,它允许把对象的持久化细节(如对象到数据库表的映射)作为一桥,与业务对象的抽象相独立。

桥接模式有哪些注意事项?

桥接模式提供了一种机制,使设计中的抽象部分和实现部分可以独立地变化和扩展。这种灵活性不仅减少了系统中的类数量,而且还提高了系统的可扩展性和可维护性。当实现系统时,可以更自由地组合不同的逻辑和功能。这种模式特别适用于那些需要处理多维度变化的系统设计,其中任何一个维度的变化都不应该影响另一个维度的实现。

值得指出的是,桥接模式与策略模式有一定的相似之处,都涉及到了组合不同的行为。不过,策略模式通常是用来封装一系列可以互换的算法或策略,且这些策略通常只是改变一个算法的细微差别。而桥接模式则是用来将抽象部分和实现部分分离,让它们可以独立地变化。因此,桥接模式的抽象和实现之间的分离程度更高,它强调独立变化以及两者之间的松散耦合。

在真实的软件开发场景中,桥接模式可以大大简化类之间的关系,尤其是当系统需要在几个维度上进行变化或扩展时。对于那些希望能够在未来进行功能增减或调整而不影响现有架构的系统,桥接模式提供了一种清晰且有效的解决方案。

在选择使用桥接模式时,需要仔细考虑抽象和实现的分离程度以及系统设计的复杂性。当涉及到多个独立但同时存在的维度时,尤其当这些维度都有可能独立变化时,桥接模式往往是非常适合的选择。不过,如果应用程序的设计并不复杂,或者维度之间的变化不频繁,采用桥接模式可能会过度设计,引入不必要的复杂性。在这种情况下,直接的继承或其他简单的设计模式可能是更好的选择。

———————————这是分割线———————————

欢迎添加博主vx深入交流:
博主微信

标签:implementor,桥接,毅四捕,模式,实现,抽象,设计模式,部分
From: https://blog.csdn.net/yes8go/article/details/137331394

相关文章

  • 设计模式总结-桥接模式
    桥接模式模式动机模式定义模式结构模式分析桥接模式实例与解析实例一:模拟毛笔模式优缺点模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方......
  • 设计模式总结-适配器模式
    适配器模式模式动机模式定义模式结构适配器模式实例与解析实例一:仿生机器人实例二:加密适配器总结模式动机在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客......
  • 毅四捕Go设计模式笔记——原型模式
    为了解决什么问题?原型模式主要用来解决对象的创建问题,特别是当直接创建对象的成本比较高时(例如,需要复杂的初始化过程,或是创建一个和已存在对象一样的实例)。它允许通过复制一个已存在的实例来返回完全一样的副本,而不需要知道对象的具体类型,并可以在此基础上进行更改。怎么......
  • 设计模式-工厂模式
    作用:提供一个接口,返回子对象将bean注入工厂方式:1.@Component+构造器:AbstractLogicChain实现ILogicChain接口@Component("rule_blacklist")publicclassBlackListLogicChainextendsAbstractLogicChain@Component("default")publicclassDefaultLogicChainex......
  • 设计模式总结-简单工厂模式
    简单工厂模式创建型模式创建型模式概述创建型模式种类简单工厂模式模式定义模式动机模式结构模式分析模式实例与解析实例一:简单电视机工厂实例二:权限管理模式优缺点简单工厂模式的优点简单工厂模式的缺点模式适用环境模式扩展小结创建型模式创建型模式概述创建......
  • Tomcat使用的设计模式
    目录门面模式(FacadePattern):观察者模式(ObserverPattern):工厂模式(FactoryPattern):策略模式(StrategyPattern):Tomcat中使用了多种设计模式,以下是主要设计模式:门面模式(FacadePattern):门面模式用于封装子系统的具体实现,为外部系统提供统一的外观类。在Tomcat中,门面模式的应......
  • 设计模式|状态机模式(State Machine Pattern)
    文章目录结构使用步骤示例使用状态机的场景常见面试题状态机模式(StateMachinePattern)是一种用于描述对象的行为软件设计模式,属于行为型设计模式。在状态机模式中,对象的行为取决于其内部状态,并且在不同的状态下,对象可能会有不同的行为。状态机模式通常涉及定义一组状......
  • 探索设计模式的魅力:揭秘B/S模式在AI大模型时代的蜕变与进化
    ​......
  • Go: 深入理解桥接模式的应用实践
    Go:深入理解桥接模式的应用实践原创 王义杰 运维开发王义杰 2024-04-0320:55 广东 听全文桥接模式是一种结构型设计模式,它将一个大类或一系列紧密相关的类分离为抽象和实现两个层次结构,从而让它们可以独立地变化。通过组合的方式,桥接模式使得抽象和实现可以独立扩......
  • 探索设计模式的魅力:揭秘B/S模式在AI大模型时代的蜕变与进化
    ​......