桥接设计模式
创始人
2024-03-18 04:41:10
0

一、桥接模式

1、定义

桥接模式(Bridge Pattern)又称作桥梁模式,指将抽象部分与具体实现部分分离,使它们都可以独立地变化,属于结构型设计模式。

桥接模式的主要目的是通过组合的方式建立两个类之间的联系,而不是继承,但又类似多重继承方案。
桥接 模式的核心在于把抽象与实现解耦。这里的抽象与实现指的是两种独立变化的维度。

2、结构

(1)模式的结构

主要角色如下:

  • 抽象角色(Abstraction):该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类。
  • 修正角色(RefinedAbstraction):Abstraction的具体实现,对 Abstraction的方法进行完善和扩展。
  • 实现角色(IImplementor):确定实现维度的基本操作,提供为 Abstraction使用。一般为接口或者抽象类。
  • 具体实现角色(ConcreteIImplementor):IImplementor的具体实现。

3、优缺点

优点:

  • 分离抽象部分及其具体实现部分。
  • 提高了系统的扩展性。
  • 符合开闭原则。
  • 符合合成复用原则。

缺点:

  • 增加了系统的理解与设计难度。
  • 需要正确地是识别系统中两个独立变化的维度。

4、使用场景

  • 在抽象和具体实现之间需要增加更多灵活性的场景。
  • 一个类存在两个或者多个独立变化的维度,而这两个或者多个维度都需要独立进行扩展。

5、在框架源码中使用

  • JDBC API源码中的 Driver类就是桥接对象。

二、模式的通用实现

代码如下:

public class BridgePattern {public static void main(String[] args) {ConcreteIImplementorA iImplementorA = new ConcreteIImplementorA();// 组合/聚合实现RefinedAbstraction abstraction = new RefinedAbstraction(iImplementorA);abstraction.operation();}
}// 抽象角色
abstract class Abstraction {// 实现角色的引用protected IImplementor iImplementor;public Abstraction(IImplementor iImplementor) {this.iImplementor = iImplementor;}public void operation(){iImplementor.operationImpl();}
}// 修正角色
class RefinedAbstraction extends Abstraction{public RefinedAbstraction(IImplementor iImplementor) {super(iImplementor);}@Overridepublic void operation() {super.operation();// do somethingSystem.out.println("RefinedAbstraction do something");}
}// 实现角色
interface IImplementor{void operationImpl();
}// 具体实现角色
class  ConcreteIImplementorA implements IImplementor{@Overridepublic void operationImpl() {System.out.println("ConcreteIImplementorA----do");}
}class  ConcreteIImplementorB implements IImplementor{@Overridepublic void operationImpl() {System.out.println("ConcreteIImplementorB----do");}
}

在这里插入图片描述

三、模式的应用实例

(1)消息-实现角色

public interface IMessage {void send(String message, String toUser);
}

(2)邮件消息-具体实现角色

public class EmailMessage implements IMessage {@Overridepublic void send(String message, String toUser) {System.out.println("使用邮件消息发送:" + message + " 给 " + toUser);}
}

(3)短信消息-具体实现角色

public class SMSMessage implements IMessage {@Overridepublic void send(String message, String toUser) {System.out.println("使用短信消息发送:" + message + " 给 " + toUser);}
}

(4)桥接抽象角色

public class AbstractMessage {protected IMessage iMessage;public AbstractMessage(IMessage iMessage) {this.iMessage = iMessage;}// 发送消息,委派给实现部分的方法public void sendMessage(String message, String toUser) {this.iMessage.send(message, toUser);}
}

(5)具体普通消息-修正角色

public class NomalMessage extends AbstractMessage {public NomalMessage(IMessage iMessage) {super(iMessage);}@Overridepublic void sendMessage(String message, String toUser) {// 普通消息,直接调用父类发送即可super.sendMessage(message, toUser);}
}

(6)具体加急消息-修正角色

public class UrgencyMessage extends AbstractMessage {public UrgencyMessage(IMessage iMessage) {super(iMessage);}@Overridepublic void sendMessage(String message, String toUser) {message = "【加急】" + message;super.sendMessage(message, toUser);// do something}
}

(7)测试

	public static void main(String[] args) {IMessage emailMessage = new EmailMessage();AbstractMessage nomalMessage = new NomalMessage(emailMessage);nomalMessage.sendMessage("野王求让buff", "赵云");IMessage smsMessage = new SMSMessage();AbstractMessage urgencyMessage = new UrgencyMessage(emailMessage);urgencyMessage.sendMessage("野王请求支援", "赵云");}

在这里插入图片描述

– 求知若饥,虚心若愚。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...