登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
每日签到
每天签到奖励2圆-6圆
发帖说明
VIP申请
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
VIP申请
VIP网盘
网盘
联系我们
每日签到
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
掌握设计模式--桥接模式
掌握设计模式--桥接模式
[ 复制链接 ]
娄静曼
2025-6-6 14:13:27
桥接设计模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们可以独立地变化。这种模式特别适合于需要在多个维度上扩展的场景,避免了类爆炸(类的数量随着组合需求呈指数级增长)的情况。
核心思想
抽象部分
:定义对象的主要功能或者高层操作接口。
实现部分
:实现抽象部分定义的具体功能。
桥接
:通过组合(而非继承)将抽象部分与实现部分连接在一起。
桥接模式关注的是
将抽象层和实现层解耦
,使得它们可以独立变化,以便应对复杂的变化场景。通过这种分离,抽象和实现可以独立扩展,不会互相影响,通常是为了处理多维度扩展问题。
组成部分
Abstraction(抽象类)
定义抽象的接口或基类。
持有一个对实现类(Implementor)的引用。
RefinedAbstraction(细化抽象类)
扩展或实现抽象类的功能。
Implementor(实现类接口)
定义实现类的通用接口。
ConcreteImplementor(具体实现类)
实现 Implementor 接口的具体逻辑。
案例--支付系统中的桥接模式
在支付系统中,我们需要支持不同的支付方式(如微信支付、支付宝支付、信用卡支付等),而且支付方式可能会随着时间和需求的变化而不断增加。同时,每种支付方式又可能需要处理不同的支付类型(例如,消费、退款等操作)。
桥接模式
可以帮助我们将支付方式和支付类型分离,让它们独立扩展,减少类的数量。
0. 类图
1. 抽象部分:支付操作
首先,我们定义一个抽象的 Payment 类,代表支付操作。该类包含一个指向支付方式的引用,支付方式可以是微信支付、支付宝支付等。
// Abstraction: 抽象的支付操作类
abstract class Payment {
protected PaymentMethod paymentMethod; // 支付方式
public Payment(PaymentMethod paymentMethod) {
this.paymentMethod = paymentMethod;
}
// 执行支付操作
abstract void executePayment(double amount);
}
复制代码
2. 具体支付操作:消费和退款
然后,我们定义两种支付类型:消费和退款。每种支付类型都可以独立扩展。
// RefinedAbstraction: 消费支付
class ConsumerPayment extends Payment {
public ConsumerPayment(PaymentMethod paymentMethod) {
super(paymentMethod);
}
@Override
void executePayment(double amount) {
System.out.println("Initiating consumer payment of " + amount + " using " + paymentMethod.getMethodName());
paymentMethod.processPayment(amount);
}
}
// RefinedAbstraction: 退款支付
class RefundPayment extends Payment {
public RefundPayment(PaymentMethod paymentMethod) {
super(paymentMethod);
}
@Override
void executePayment(double amount) {
System.out.println("Initiating refund payment of " + amount + " using " + paymentMethod.getMethodName());
paymentMethod.processPayment(amount);
}
}
复制代码
3. 实现部分:支付方式
接下来,我们定义支付方式接口 PaymentMethod,以及它的具体实现类:微信支付、支付宝支付、信用卡支付等。
// Implementor: 支付方式接口
interface PaymentMethod {
String getMethodName(); // 获取支付方式名称
void processPayment(double amount); // 处理支付操作
}
// ConcreteImplementor: 微信支付
class WeChatPayment implements PaymentMethod {
@Override
public String getMethodName() {
return "WeChat Payment";
}
@Override
public void processPayment(double amount) {
System.out.println("Processing payment of " + amount + " through WeChat.");
}
}
// ConcreteImplementor: 支付宝支付
class AlipayPayment implements PaymentMethod {
@Override
public String getMethodName() {
return "Alipay Payment";
}
@Override
public void processPayment(double amount) {
System.out.println("Processing payment of " + amount + " through Alipay.");
}
}
// ConcreteImplementor: 信用卡支付
class CreditCardPayment implements PaymentMethod {
@Override
public String getMethodName() {
return "Credit Card Payment";
}
@Override
public void processPayment(double amount) {
System.out.println("Processing payment of " + amount + " through Credit Card.");
}
}
复制代码
4. 使用桥接模式的客户端
我们可以通过客户端代码来进行测试。客户端可以动态地组合不同的支付方式和支付操作类型(如消费或退款)。
public class BridgePatternExample {
public static void main(String[] args) {
// 使用微信支付进行消费
Payment payment1 = new ConsumerPayment(new WeChatPayment());
payment1.executePayment(100.0);
// 使用支付宝支付进行退款
Payment payment2 = new RefundPayment(new AlipayPayment());
payment2.executePayment(50.0);
// 使用信用卡支付进行消费
Payment payment3 = new ConsumerPayment(new CreditCardPayment());
payment3.executePayment(200.0);
}
}
复制代码
5. 运行结果
我们通过桥接模式将支付操作(抽象)和支付方式(具体)分离开来,
使得支付操作和支付方式可以独立扩展
。之所以,称支付操作为
抽象部分
、支付方式为
具体部分
,那是因为支付操作并没有实实在在调用支付接口完成支付操作,而是由支付方式去调用支付接口完成的支付操作。 如果将来我们需要添加新的支付操作(例如银行转账等)或支付方式(例如代付、分期付款等),我们可以独立地扩展它们,而不需要修改现有的代码。
桥接模式与策略模式的对比
策略模式
:如果你希望在运行时动态地切换支付方式,而不需要知道具体的支付操作(如消费、退款等),
策略模式
更合适。在这种模式下,我们将支付方式作为一种策略,并在运行时选择适当的策略来处理支付。
桥接模式
:如果你有多个维度需要扩展(比如支付操作和支付方式),并且希望将抽象和实现分离,使得它们可以独立变化,
桥接模式
则更为合适。桥接模式适合需要同时支持多个变化维度(例如支付方式和支付类型)的场景。
桥接模式的优点
分离抽象和实现
:可以分别独立开发,不互相影响;
提高系统的扩展性
:增加新的抽象类或实现类都非常方便;
多维度遵循开闭原则
:在多维度场景问题中,修改或扩展某一维度不会影响其他部分。
桥接模式的适用场景
一个类有两个(或多个)独立变化的维度
,且需要独立扩展时。
不希望通过继承增加类的数量。
需要在运行时切换实现。
总结
桥接模式通过将抽象部分和实现部分分离,极大地增强了代码的灵活性和可维护性。它是一种非常实用的设计模式,尤其在需要扩展多个维度的场景中,可以显著减少代码复杂度。
桥接模式
强调抽象和实现分离及多维度扩展
,在这些情况下可以考虑使用桥接模式。
需要查看往期设计模式文章的,可以在个人主页中或者文章开头的集合中查看,可关注我,持续更新中。。。
超实用的SpringAOP实战之日志记录
2023年下半年软考考试重磅消息
通过软考后却领取不到实体证书?
计算机算法设计与分析(第5版)
Java全栈学习路线、学习资源和面试题一条龙
软考证书=职称证书?
软考中级--软件设计师毫无保留的备考分享
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
掌握
设计模式
桥接
模式
相关帖子
行为型模式-协作与交互机制
高效查日志进阶指南:掌握grep命令的完整技巧
高效查日志进阶指南:掌握grep命令的完整技巧
分层架构模式深度解析
六边形架构模式深度解析
夜莺监控的几种架构模式详解
Java 集合--快速掌握涵盖三大场景实现的Set集合底层原理
KMP 模式串匹配算法讲解
设计模式之单例模式
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
行为型模式-协作与交互机制
0
101
固拆棚
2025-07-24
安全
高效查日志进阶指南:掌握grep命令的完整技巧
0
275
祉遛吾
2025-07-28
安全
高效查日志进阶指南:掌握grep命令的完整技巧
0
810
映各
2025-07-28
安全
分层架构模式深度解析
0
1106
冈欤寨
2025-08-03
业界
六边形架构模式深度解析
0
518
梁宁
2025-08-07
业界
夜莺监控的几种架构模式详解
0
213
阕阵闲
2025-08-14
业界
Java 集合--快速掌握涵盖三大场景实现的Set集合底层原理
0
407
澹台忆然
2025-08-18
安全
KMP 模式串匹配算法讲解
0
317
赶塑坠
2025-09-02
安全
设计模式之单例模式
0
77
颖顿庐
2025-09-03
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
娄静曼
2025-6-6 14:13:27
关注
0
粉丝关注
19
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
杭环
9988
凶契帽
9988
4
氛疵
9988
5
黎瑞芝
9988
6
猷咎
9986
7
里豳朝
9986
8
肿圬后
9986
9
蝓俟佐
9984
10
虽裘侪
9984
查看更多