五、桥接模式

概念

它通过将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦

应用场景

1)当出现多对多业务场景时,使用桥接模式可以各自实现每一部分,不会产生笛卡尔积中组合结果

2)将抽象与实现分开,各自可以独立的变化。抽象方法只作为具体实现中的某一步。修改时可以灵活修改,而不是在抽象类中编写大量的方法交给客户端选择调用。

通俗讲,桥‏接模式就是在两个可؜能独立变化的部分之؜间搭一座“桥”,让⁡它们能灵活组合,而不是‍死死绑定

基本结构

1)抽象化‏(Abstracti؜on):定义抽象的接؜口,同时维护一个对实⁡现化对象(Imple‍mentor)的引用

2)扩展抽‏象化(Refined؜ Abstracti؜on):在抽象化基础⁡上扩展,调用实现化对‍象的方法,增加新的功能

3)实现化‏(Implement؜or):定义实现化角؜色的接口,它不需要与⁡抽象化接口完全一样,‍但一般要提供基本操作

4)具体实‏现化(Concre؜te Implem؜entor):真正⁡去实现实现化接口的‍类,完成具体的业务逻辑

代码实现

以 ‏“消息推送系统” ؜为例

Implementor

定义发‏送渠道接口:表示消息؜发送的底层实现渠道

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

ConcreteImplementor

实现不同的发送渠道:封装具体发送逻辑

public class EmailSender implements MessageSender {
    public void send(String message) {
        System.out.println("通过【邮件】发送消息:" + message);
    }
}
public class SMSSender implements MessageSender {
    public void send(String message) {
        System.out.println("通过【短信】发送消息:" + message);
    }
}
public class WeChatSender implements MessageSender {
    public void send(String message) {
        System.out.println("通过【微信】发送消息:" + message);
    }
}

Abstraction

定义抽象消息类:对外提供发送消息的统一入口

public abstract class Message {
    protected MessageSender sender;

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

    public abstract void send(String content);
}

RefinedAbstraction

实现不同的消息类型:定义业务维度的扩展

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

    public void send(String content) {
        System.out.println("【普通通知】开始发送...");
        sender.send(content);
    }
}
public class UrgentMessage extends Message {
    public UrgentMessage(MessageSender sender) {
        super(sender);
    }

    public void send(String content) {
        System.out.println("【紧急告警】开始发送...");
        sender.send("【加急】" + content);
    }
}

客户端

组合不同类型和渠道,灵活发送

new 出不同的渠道,提供给外层不同的消息类型

public class Client {
    public static void main(String[] args) {
        MessageSender emailSender = new EmailSender();
        MessageSender smsSender = new SMSSender();
        MessageSender weChatSender = new WeChatSender();

        Message normalMsgViaEmail = new NormalMessage(emailSender);
        Message urgentMsgViaSMS = new UrgentMessage(smsSender);
        Message urgentMsgViaWeChat = new UrgentMessage(weChatSender);

        normalMsgViaEmail.send("欢迎使用我们的系统!");
        urgentMsgViaSMS.send("服务器 CPU 负载率过高!");
        urgentMsgViaWeChat.send("数据库连接异常!");
    }
}

优缺点

优点

1)解耦抽象和实现:在不改变抽象类的情况下,改变其实现类,反之亦然

2)符合开闭原则:可以在不修改现有代码的基础上,灵活地增加新的抽象层和实现层,便于扩展

缺点

1)不适合简单场景:对于那些抽象和实现之间变化不大的简单场景,使用桥接模式可能会显得过于复杂和冗余。此时,直接将抽象和实现合并在一起可能会更加高效和直观。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇