设计模式-桥接模式01

一、桥接模式简介

桥接模式是一种结构型设计模式,它的核心目的是将抽象部分与实现部分分离,使它们都可以独立变化。通过引入桥接模式,可以避免多维度继承带来的类爆炸问题。

通俗理解:桥接模式就是把“两个变化的维度”分开管理,通过“桥”进行连接。


二、适用场景

  • 当类的功能有多个维度变化(如平台和功能),并且每个维度都可能扩展时。
  • 避免因为多维度扩展而导致的类爆炸(比如每个维度都用继承,会有大量子类)。
  • 希望能够动态切换实现。

典型例子:
假如你要开发一个图形库,支持不同的图形(圆、方)和不同的显示方式(矢量、位图),如果直接继承,会导致每种图形和每种显示方式都要有一个类,类数量 = 图形数量 × 显示方式数量。而桥接模式可以将图形和显示方式分开实现,并通过桥接连接。


三、结构分析

桥接模式主要包含以下角色:

  1. 抽象类(Abstraction):定义抽象部分的接口,并引用实现部分的对象。
  2. 扩充抽象类(RefinedAbstraction):扩展抽象接口。
  3. 实现类接口(Implementor):定义实现部分的接口。
  4. 具体实现类(ConcreteImplementor):实现实现类接口的具体类。

UML类图:

      Abstraction
          |
          |-------------------
          |                  |
RefinedAbstraction      Implementor
                            |
                            |
                   ConcreteImplementor

四、代码实例

假设我们有不同类型的消息(加急、普通),以及不同的消息发送方式(短信、邮件)。

1. 实现部分接口

// Implementor
public interface MessageSender {
    void send(String message);
}

// ConcreteImplementor
public class SmsSender implements MessageSender {
    public void send(String message) {
        System.out.println("发送短信: " + message);
    }
}

public class EmailSender implements MessageSender {
    public void send(String message) {
        System.out.println("发送邮件: " + message);
    }
}

2. 抽象部分

// Abstraction
public abstract class Message {
    protected MessageSender sender;

    public Message(MessageSender sender) {
        this.sender = sender;
    }

    public abstract void sendMessage(String message);
}

// RefinedAbstraction
public class UrgentMessage extends Message {
    public UrgentMessage(MessageSender sender) {
        super(sender);
    }

    public void sendMessage(String message) {
        sender.send("[加急] " + message);
    }
}

public class NormalMessage extends Message {
    public NormalMessage(MessageSender sender) {
        super(sender);
    }

    public void sendMessage(String message) {
        sender.send("[普通] " + message);
    }
}

3. 客户端调用

public class Client {
    public static void main(String[] args) {
        MessageSender sms = new SmsSender();
        MessageSender email = new EmailSender();

        Message urgentSms = new UrgentMessage(sms);
        Message normalEmail = new NormalMessage(email);

        urgentSms.sendMessage("系统故障,请速处理!");
        normalEmail.sendMessage("每周例会通知。");
    }
}

输出结果:

发送短信: [加急] 系统故障,请速处理!
发送邮件: [普通] 每周例会通知。

五、优缺点

优点

  • 分离抽象和实现,各自可以独立扩展,符合开闭原则。
  • 降低类的数量,避免多维度子类爆炸。
  • 动态组合实现,灵活性高。

缺点

  • 增加了系统设计的复杂度,多了一个抽象层。

六、总结

桥接模式适用于多维度变化的场景,是一种典型的“组合优于继承”的设计思想。它让抽象和实现可以独立扩展,是大型系统架构中常用的模式之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值