首页 > 其他分享 >设计模式-桥接模式

设计模式-桥接模式

时间:2024-06-13 14:58:26浏览次数:20  
标签:String 桥接 模式 toUser IMessage message 设计模式 public senMessage

桥接模式

桥接模式(bridge)也成为桥梁模式,接口(Interface)模式,柄体(Handle And Body)模式,是将抽象部分与它的具体实现部分分离,使得它们可以独立的变化,属于结构型模式。
桥接模式主要是通过组合的方式建立两个类之间的关系,而不是继承。但又类似于多重继承方案,但是多重继承方案往往违背了的单一职责原则,其复用性比较差,桥接模式是比多重继承方案更好的替代方案。
桥接模式的核心在于解耦抽象和实现。
桥接模式主要包含四种角色

  • ①抽象Abstraction:该类持有一个对实现角色的引用,抽象角色的方法需要实现角色来实现。抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象)
  • ②修正抽象RefinedAbstraction:Abstraction的具体实现,对Abstraction的方法进行完善和扩展。
  • ③实现Implementor:确定实现维度的基本操作,提供给Abstraction使用,该类一般为接口或实现类。
  • ④具体实现ConcreteImplementor:Implementor的具体实现。

应用场景

  • 在抽象和具体之间需要增加更多的灵活性的场景
  • 一个类中存在两个或多个独立变化的维度,而这些维度可能需要扩展
    不希望使用继承或因为多继承导致系统类的个数剧增

举例:
平时工作中 我们发消息 可以通过手机发送,邮件发送,以及内部系统发送。消息级别可以是普通,加急,特急消息。

package com.jdwa.bridge;

public interface IMessage {
    void send(String message,String toUser);
}
package com.jdwa.bridge;

public class PhoneMessage implements IMessage {
    @Override
    public void send(String message, String toUser) {
        System.out.println(String.format("使用手机的方式发送消息 %s 给 %s",message,toUser));
    }
}
package com.jdwa.bridge;

public class EmailMessage implements IMessage {

    @Override
    public void send(String message, String toUser) {
        System.out.println(String.format("使用邮件的方式发送消息 %s 给 %s",message,toUser));
    }
}
package com.jdwa.bridge;

public class SystemMessage implements IMessage {
    @Override
    public void send(String message, String toUser) {
        System.out.println(String.format("使用内部系统的方式发送消息 %s 给 %s",message,toUser));
    }
}
package com.jdwa.bridge;

public abstract class AbstractMessage {
    private IMessage message;
    
    public AbstractMessage (IMessage message){
        this.message = message;
    }
    
    public void senMessage(String message,String toUser){
        this.message.send(message, toUser);
    }
}
package com.jdwa.bridge;

public class NomalMessage extends AbstractMessage{

    private IMessage message;

    public NomalMessage(IMessage message){
        super(message);
    }


    @Override
    public void senMessage(String message,String toUser){
        message = "【普通】"+message;
        super.senMessage(message, toUser);
    }


}
package com.jdwa.bridge;

public class UrgencyMessage extends AbstractMessage{
    public UrgencyMessage(IMessage message) {
        super(message);
    }

    @Override
    public void senMessage(String message,String toUser){
        message = "【加急】"+message;
        super.senMessage(message, toUser);
    }
}
package com.jdwa.bridge;

public class ExtraUrgency extends AbstractMessage {
    public ExtraUrgency(IMessage message) {
        super(message);
    }

    @Override
    public void senMessage(String message,String toUser){
        message = "【加急】"+message;
        super.senMessage(message, toUser);
    }
}
package com.jdwa.bridge;

public class Client {
    public static void main(String[] args) {
        IMessage message = new EmailMessage();
        AbstractMessage abstractMessage = new NomalMessage(message);
        abstractMessage.senMessage("加班申请","王总");

        IMessage message1 = new SystemMessage();
        AbstractMessage abstractMessage1 = new UrgencyMessage(message1);
        abstractMessage1.senMessage("请假","张总");

        IMessage message2 = new PhoneMessage();
        AbstractMessage abstractMessage2 = new ExtraUrgency(message2);
        abstractMessage2.senMessage("调休","陈总");

    }
}
使用邮件的方式发送消息 【普通】加班申请 给 王总
使用内部系统的方式发送消息 【加急】请假 给 张总
使用手机的方式发送消息 【加急】调休 给 陈总
欢迎大家留言,以便于后面的人更快解决问题!另外亦欢迎大家可以关注我的微信公众号,方便利用零碎时间互相交流。共勉!

标签:String,桥接,模式,toUser,IMessage,message,设计模式,public,senMessage
From: https://www.cnblogs.com/caozz/p/18245848/bridge

相关文章

  • 设计模式之策略模式
    设计模式中的策略模式及其应用一、策略模式概述策略模式是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。简而言之,策略模式允许在运行时根据需要选择不同的算法行为。二、策略模式的结......
  • 在 Wed 中应用 MyBatis(同时使用MVC架构模式,以及ThreadLocal 事务控制)
    1.在Wed中应用MyBatis(同时使用MVC架构模式,以及ThreadLocal事务控制)@目录1.在Wed中应用MyBatis(同时使用MVC架构模式,以及ThreadLocal事务控制)2.实现步骤:1.第一步:环境搭建2.第二步:前端页面index.html3.第三步:创建pojo包、service包、dao包、web包、utils包,exceptions......
  • 【设计模式】创建型设计模式之工厂模式(简单工厂、工厂方法、抽象工厂、go简单实例)
    一般情况下,工厂模式分为三种更为细分的类型:简单工厂、工厂方法和抽象工厂。其中,前两者的方法原理比较简单,在实际的项目里也比较常用;而抽象工厂的原理稍微复杂,在实际的项目中相对也不常用。所以,我们今天重点是前两种工厂模式,简单工厂在下面这段代码里,我们根据配置文件的后......
  • PasteSpider的集群组件PasteCluster(让你的项目快速支持集群模式)的思路及实现(含源码
    PasteSpider是什么?一款使用.net编写的开源的Linux容器部署助手,支持一键发布,平滑升级,自动伸缩,Key-Value配置,项目网关,环境隔离,运行报表,差量升级,私有仓库,集群部署,版本管理等!30分钟上手,让开发也可以很容易的学会在linux上部署你得项目![从需求角度介绍PasteSpider(K8S平替部署......
  • 【redis】使用redis benchmark评估哨兵模式主节点性能
    一、场景   验证redis哨兵模式主节点性能 二、工具Redis benchmark官网Redisbenchmark|Docs 三、命令介绍 四、使用redis-benchmark-h192.168.3.190-p26380-a123456-n100000-c20======PING_INLINE======100000requestscompletedin1.4......
  • 深入理解java设计模式之单例模式
    这里写目录标题概述单例模式是什么单例模式的使用场景单例模式的优缺点单例模式的几种实现方式饿汉式懒汉式双重检查锁定机制静态内部类枚举使用容器几种可能破坏单例类的方法多线程环境下的竞争条件使用反射机制使用序列化多个类加载器......
  • HXJ8002F 3W带关断模式AB类音频功放集成电路芯片IC
    一般描述    HXJ8002F是一颗带关断模式的音频功放IC。在5V输入电压下工作时,负载(4Ω)上的平均功率为3W,且失真度不超过10%。而对于手提设备而言,当VDD作用于关断端时,HXJ8002F将会进入模戚,此时的功耗极低。    HXJ8002F的应用电路简单,只需极少数外围器件HXJ8002......
  • 元灵诀 逆天纪系统搭建 零撸看广告升级模式 定制开发
    在当今互联网飞速发展的时代,元灵诀逆天纪系统的出现无疑为游戏行业注入了新的活力。这款系统不仅是一个定制开发的youxiu作品,更是对游戏产业的一次深度思考和探索。其独特的零撸看广告升级模式,将游戏体验和商业模式完美结合,开启了新的篇章。    首先,元灵诀逆天纪系统......
  • WPF/C#:程序关闭的三种模式
    ShutdownMode枚举类型介绍ShutdownMode是一个枚举类型,它定义了WPF应用程序的关闭方式。这个枚举类型有三个成员:OnLastWindowClose:当最后一个窗口关闭或者调用System.Windows.Application.Shutdown方法时,应用程序会关闭。OnMainWindowClose:当主窗口关闭或者调用System.Windows.......
  • GraphQL的优势和开发模式
    当下,前后端分离是互联网应用程序开发的主流做法,如何设计合理且高效的前后端交互WebAPI是前端和后台开发人员日常开发工作的一大难点和痛点。回想我们在日常开发过程中经常会碰到的几个场景:后台开发人员调整了返回值的类型和数量而没有通知到前端后台开发人员修改了某一个字段......