千家信息网

设计模式系列之什么是桥接模式

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"设计模式系列之什么是桥接模式",在日常操作中,相信很多人在设计模式系列之什么是桥接模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"设计模式系列之什么
千家信息网最后更新 2026年10月31日设计模式系列之什么是桥接模式

这篇文章主要介绍"设计模式系列之什么是桥接模式",在日常操作中,相信很多人在设计模式系列之什么是桥接模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"设计模式系列之什么是桥接模式"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、概述

桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。

2、适用场景

1)如果你想要拆分或重组一个具有多重功能的庞杂类 , 可以使用桥接模式。2) 如果你希望在几个独立维度上扩展一个类, 可使用该模式。对象的属性有其他类去实现,不需要自己处理所有工作。3)如果你需要在运行时切换不同实现方法, 可使用桥接模式。桥接模式可替换抽象部分中的实现对象, 具体操作就和给成员变量赋新值一样简单。

3、实例

有以下场景:

支付途径:微信,支付宝 支付方式:指纹,扫脸

3.1 不使用桥接模式

定义两个枚举

/**  * 支付方式  */ public enum PayMethodEnum {      FACE(0, "扫脸"),     FINGER(1, "指纹");       PayMethodEnum(int code, String name) {         this.code = code;         this.name = name;     }      public int getCode() {         return code;     }      public void setCode(int code) {         this.code = code;     }      public String getName(int code) {         PayMethodEnum[] payWaysEnums = values();         for (PayMethodEnum payMethodEnum : payWaysEnums) {             if (payMethodEnum.code == code) {                 return payMethodEnum.name;             }         }         return null;     }      public void setName(String name) {         this.name = name;     }      private int code;      private String name;  }
/**  * 支付途径  */ public enum PayWaysEnum {      ZHIFUBAO(0, "支付宝"),     WEIXIN(1, "微信");       PayWaysEnum(int code, String name) {         this.code = code;         this.name = name;     }      public int getCode() {         return code;     }      public void setCode(int code) {         this.code = code;     }      private int code;       public void setName(String name) {         this.name = name;     }      public String getName(int code) {         PayWaysEnum[] payWaysEnums = values();         for (PayWaysEnum payWaysEnum : payWaysEnums) {             if (payWaysEnum.code == code) {                 return payWaysEnum.name;             }         }         return null;     }      private String name;  }

定义支付业务流程:

public class Pay {      public void pay(int payMethod, int payWay) {         if (PayMethodEnum.FACE.getCode() == payMethod) {             System.out.println("当前支付方式是:" + PayMethodEnum.FACE.getName(payMethod));         } else {             System.out.println("当前支付方式是:" + PayMethodEnum.FINGER.getName(payMethod));         }         if (PayWaysEnum.ZHIFUBAO.getCode() == payWay) {             System.out.println("当前支付途径是:" + PayWaysEnum.ZHIFUBAO.getName(payWay));         } else {             System.out.println("当前支付途径是:" + PayWaysEnum.WEIXIN.getName(payWay));         }     } }

测试类:

@RunWith(SpringRunner.class) @SpringBootTest(classes = TestApplication.class) public class TestDemo {      @Test     public void test() {         Pay pay = new Pay();         //支付宝扫脸支付         pay.pay(PayMethodEnum.FACE.getCode(),PayWaysEnum.ZHIFUBAO.getCode());         System.out.println("--------------------------------------");         //微信扫脸支付         pay.pay(PayMethodEnum.FACE.getCode(),PayWaysEnum.WEIXIN.getCode());         System.out.println("--------------------------------------");         //支付宝指纹支付         pay.pay(PayMethodEnum.FINGER.getCode(),PayWaysEnum.ZHIFUBAO.getCode());         System.out.println("--------------------------------------");         //微信指纹支付         pay.pay(PayMethodEnum.FINGER.getCode(),PayWaysEnum.WEIXIN.getCode());         System.out.println("--------------------------------------");     }  }

结果:

当前支付方式是:扫脸 当前支付途径是:支付宝 -------------------------------------- 当前支付方式是:扫脸 当前支付途径是:微信 -------------------------------------- 当前支付方式是:指纹 当前支付途径是:支付宝 -------------------------------------- 当前支付方式是:指纹 当前支付途径是:微信 --------------------------------------

3.2 使用桥接模式

定义枚举:

/**  * 支付方式  */ public enum PayMethodEnum {      FACE(0, "扫脸"),     FINGER(1, "指纹");       PayMethodEnum(int code, String name) {         this.code = code;         this.name = name;     }      public int getCode() {         return code;     }      public void setCode(int code) {         this.code = code;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      private int code;      private String name;  }
/**  * 支付途径  */ public enum PayWaysEnum {      ZHIFUBAO(0, "支付宝"),     WEIXIN(1, "微信");       PayWaysEnum(int code, String name) {         this.code = code;         this.name = name;     }      public int getCode() {         return code;     }      public void setCode(int code) {         this.code = code;     }      private int code;       public void setName(String name) {         this.name = name;     }      public String getName() {         return name;     }      private String name;  }

定义两个顶层抽象接口:

/**  * 支付方式接口  */ public interface IPayMethod {      void pay(); }
/**  * 支付途径接口  */ public interface IPayWay {      void pay(); }

定义两种支付方式:

/**  * 指纹  */ public class FingerPay implements IPayMethod {      @Override     public void pay() {         System.out.println("当前支付方式是:" + PayMethodEnum.FINGER.name());     } }
/**  * 扫脸  */ public class FacePay implements IPayMethod {      @Override     public void pay() {         System.out.println("当前支付方式是:" + PayMethodEnum.FACE.name());     } }

定义两种支付途径:

/**  * 微信  */ public class WXPayWay implements IPayWay {      private IPayMethod payMethod;      public WXPayWay(IPayMethod payMethod) {         this.payMethod = payMethod;     }      @Override     public void pay() {         System.out.println("当前支付方式是:" + PayWaysEnum.WEIXIN.getName());         payMethod.pay();     } }
/**  * 支付宝  */ public class ZFBPayWay implements IPayWay {      private IPayMethod payMethod;      public ZFBPayWay(IPayMethod payMethod) {         this.payMethod = payMethod;     }      @Override     public void pay() {         System.out.println("当前支付方式是:" + PayWaysEnum.ZHIFUBAO.getName());         payMethod.pay();     } }

测试类:

@RunWith(SpringRunner.class) @SpringBootTest(classes = TestApplication.class) public class TestDemo {      @Test     public void test() {         FacePay facePay = new FacePay();         FingerPay fingerPay = new FingerPay();         ZFBPayWay zfbPayFace = new ZFBPayWay(facePay);         WXPayWay wxPayWayFace = new WXPayWay(facePay);         ZFBPayWay zfbPayFinger = new ZFBPayWay(fingerPay);         WXPayWay wxPayWayFinger = new WXPayWay(fingerPay);         //支付宝扫脸支付         zfbPayFace.pay();         System.out.println("--------------------------------------");         //微信扫脸支付         wxPayWayFace.pay();         System.out.println("--------------------------------------");         //支付宝指纹支付         zfbPayFinger.pay();         System.out.println("--------------------------------------");         //微信指纹支付         wxPayWayFinger.pay();         System.out.println("--------------------------------------");     }  }

结果:

当前支付方式是:支付宝 当前支付方式是:FACE -------------------------------------- 当前支付方式是:微信 当前支付方式是:FACE -------------------------------------- 当前支付方式是:支付宝 当前支付方式是:FINGER -------------------------------------- 当前支付方式是:微信 当前支付方式是:FINGER --------------------------------------

4、分析

如上两种方式都实现了四种支付的过程,其中是以支付途径(支付宝、微信)为主,包含两种支付方式(扫脸、指纹)。

从代码量分析:

不使用:代码还是比较少的,但是其实主要业务逻辑要卸载Pay这个类中,通过if,else判断进行业务逻辑的判断。

使用:代码量大量提升,增加了很多个类,但是pay的业务逻辑只会在自己的类中执行,符合单一职责。

从可扩展层面,假如增加云闪付支付途径:

不使用:需要修改Pay类,增加云闪付的逻辑判断,不符合开闭原则。

使用:只需要增加一个云闪付支付途径即可,不需要修改其他业务逻辑,符合开闭原则。

代码耦合层面:

不使用:代码业务逻辑耦合在一起。

使用的:代码耦合性极低。

到此,关于"设计模式系列之什么是桥接模式"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

支付 方式 模式 途径 指纹 业务 代码 逻辑 设计模式 设计 学习 两个 接口 耦合 原则 场景 对象 层面 方法 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 互联网科技产业 互联网核心科技是什么 互联网科技的发展 致聘互联网科技 沃里互联网科技 科技互联网创业计划书 镁科技互联网资讯平台 富国互联网科技创新基金 须眉科技是互联网公司吗 中国互联网有什么科技含量 华服互联网科技官网 互联网大会黑科技排名 阿大互联网科技有限公司 本届互联网博览会上的黑科技 浙南科技城互联网大厦建设工程 河南住房之家互联网科技 互联网科技包装股份有限公司上市 珠海东科互联网科技有限公司 版纳互联网科技选哪家 广东万易互联网科技有限公司惠州分公司 广东猪兼强互联网科技有限公司 互联网科技行业发展 互联网金融 科技金融 汇久创客互联网科技 互联网系的金融科技公司 阿大互联网科技有限公司 区块链结合互联网科技 中国互联网公司的科技投入 北京军民互联网科技公司
0