type
status
date
slug
summary
tags
category
icon
password
AI summary
一、定义
桥接模式:将一个大类或者一系列相关的类拆分为抽象和实现两个独立的层级结构,从而在开发的时候独立使用
主要作⽤就是通过将
抽象部分
与实现部分
分离,把多种可匹配
的使⽤进⾏组合
。说⽩了核⼼实现也就是在A类
中含有B类
接口,通过构造函数
传递B类
的实现,这个B类
就是设计的桥
。在⼀些组合中如果有如果
每⼀个类都实现不同的服务
可能会出现笛卡尔积
,⽽使⽤桥接模式就可以⾮常简单。二、示例:
模拟场景:
1、例如:假如你有一个几何 形状Shape类, 从它能扩展出两个子类: 圆形Circle和 方形Square 。 你希望对这样的类层次结构进行扩展以使其包含颜色, 所以你打算创建名为 红色Red和 蓝色Blue的形状子类。 但是, 由于你已有两个子类,所以总共需要创建四个类才能覆盖所有组合,例如蓝色圆形BlueCircle和 红色方形RedSquare 。
在层次结构中新增形状和颜色将导致代码复杂程度指数增长。 例如添加三角形状, 你需要新增两个子类, 也就是每种颜色一个; 此后新增一种新颜色需要新增三个子类, 即每种形状一个。 如此以往, 情况会越来越糟糕。
2、例如:随着市场的竞争在⽀付服务⾏业出现了微信和⽀付宝还包括⼀些其他⽀付服务,同时⽀持⼈脸、扫描、密码多种⽅式
模拟⼀个这样的第三⽅平台来承接各个⽀付能⼒,同时使⽤⾃家的⼈脸让⽤户⽀付起来更加容易。那么这⾥就出现了多⽀付与多模式的融合使⽤,如果给
的模式,即使是继承类也需要开发好多。⽽且随着后⾯接⼊了更多的⽀付服务或者⽀付⽅式,就会呈
的扩展
传统编码方式(关于支付的)
一旦扩充新的支付平台或支付方式,需要多次if else的代码判断,扩充修改代码:
PayController
测试:
ApiTest
桥接模式(关于支付的)
桥接点,抽象接口,不同的支付方式实现此接口:
IPayMode
人脸支付:
FacePayMode
指纹支付:
FingerPayMode
密码支付:
PayCypher
支付平台抽象类,可以传递不同的支付方式的实现类:
Pay
微信支付:
WeiXinPay
支付宝支付:
AliPay
测试:
ApiTest
桥接模式(几何形状)
桥接点,抽象接口,不同的颜色实现此接口:
Color
红色:
RedColor
白色:
WhiteColor
抽象类:
Shape
长方形:
Rectangle
圆形:
Circle
测试:
ApiTest
UML关系图
总结:
通过模拟微信与⽀付宝两个⽀付渠道在不同的⽀付模式下,
刷脸 、 指纹 、 密码
,的
组合
从⽽体现了桥接模式的在这类场景中的合理运⽤。简化了代码的开发,给后续的需求迭代增加了很好的扩展性。
从桥接模式的实现形式来看满⾜了单⼀职责和开闭原则,让每⼀部分内容都很清晰易于维护和拓展,但如果我们是实现的⾼内聚的代码,那么就会很复杂。所以在选择᯿构代码的时候,需要考虑好整体的设计,否则选不到合理的设计模式,将会让代码变得难以开发
- 作者:IT小舟
- 链接:https://codegym.top/article/JAVA%E3%80%90%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%91%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。