设计模式——桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。


前言

        桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与实现部分分离,使它们可以独立地变化。它通过提供一个桥接结构,将抽象部分与实现部分解耦,这样两者的变化不会相互影响,从而应对多层继承结构带来的问题。假设你正在设计一个游戏,游戏中有不同类型的角色和武器。如果不使用桥接模式,你可能会为每种角色和武器的组合创建一个子类,这样会导致大量的子类产生。但是,如果使用桥接模式,你可以将角色和武器分离开来,使得它们可以独立地进行扩展。你可以创建一个角色接口和一个武器接口,然后让每个具体的角色类和武器类实现这些接口。这样,你就可以在运行时动态地组合不同的角色和武器,而不需要创建大量的子类。


一、桥接模式的核心角色

  • 抽象化(Abstraction):它是用于定义抽象的基本操作的接口或抽象类。
  • 修正/细化(RefinedAbstraction):它是扩展了抽象化角色的抽象,与实现化角色一起使用。
  • 实现化(Implementor):它是定义实现部分接口的接口或抽象类。
  • 具体实现化(ConcreteImplementor):它是实现化角色接口的具体实现。

二、具体实现

1实现化接口

代码如下(示例):

// 实现化接口
interface Implementor {
    void operationImpl();
}

2.具体实现化类

代码如下(示例):

// 具体实现化类A
class ConcreteImplementorA implements Implementor {
    public void operationImpl() {
        System.out.println("ConcreteImplementorA operation");
    }
}

// 具体实现化类B
class ConcreteImplementorB implements Implementor {
    public void operationImpl() {
        System.out.println("ConcreteImplementorB operation");
    }
}

3.抽象化接口

代码如下(示例):

// 抽象化接口
interface Abstraction {
    void operation();
    void setImplementor(Implementor implementor);
}

2.细化抽象类

代码如下(示例):

/ 修正抽象化类
class RefinedAbstraction implements Abstraction {
    private Implementor implementor;

    public void operation() {
        implementor.operationImpl();
    }

    public void setImplementor(Implementor implementor) {
        this.implementor = implementor;
    }
}

2.客户端调用

代码如下(示例):

// 客户端调用
public class Client {
    public static void main(String[] args) {
        Abstraction abstraction = new RefinedAbstraction();
        Implementor implementorA = new ConcreteImplementorA();
        Implementor implementorB = new ConcreteImplementorB();

        abstraction.setImplementor(implementorA);
        abstraction.operation(); // 输出:ConcreteImplementorA operation

        abstraction.setImplementor(implementorB);
        abstraction.operation(); // 输出:ConcreteImplementorB operation
    }
}

三、桥接模式的优缺点

优点

  1. 分离抽象与实现:桥接模式通过组合关系解耦了抽象和实现之间的继承关系,使得抽象和实现可以沿着自己的维度进行扩展,而不会受到对方的影响。
  2. 提高可扩展性:由于抽象和实现的分离,系统可以在多个维度上进行扩展,增加了系统的灵活性和可维护性。
  3. 减少子类的个数:在有多个维度变化时,如果不使用桥接模式,可能会产生大量的子类。桥接模式通过组合而非继承来解决问题,从而减少了子类的个数。

缺点

  1. 上手难度较大:由于桥接模式涉及到抽象和实现的分离,这可能会增加系统的复杂性,对于初学者来说,理解和实现起来可能比较困难。
  2. 设计和实现的复杂性:桥接模式需要正确识别出系统中独立的两个变化维度,并分别对它们进行封装,这可能会增加设计和实现的难度。
  3. 可能过度设计:如果系统不需要在多个维度上独立变化,或者继承层次不会导致问题,那么使用桥接模式可能会导致过度设计。

四、应用场景

1.实现系统可能有多个角度分类,每一种角度都可能变化。

2.不希望在抽象和它的实现部分有一个固定绑定关系。

3.类的抽象以及它的实现都应该可以通过生成子类的方式来加以扩充。

4.对一个抽象的实现部分的修改对客户不产生影响。

总结

        桥接模式提供了一种分离抽象和实现的方法,使得它们可以独立地变化。这种模式在处理多个类层次结构的系统时非常有用,它可以减少子类的个数,降低系统管理和维护的难度。然而,桥接模式也可能会增加系统的复杂性,因此在使用时需要权衡其利弊。

  • 30
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值