Java桥梁设计模式优雅地将抽象与实现分离
目录
介绍实现总结优点缺点应用场景介绍
Java桥梁模式(也称桥接模式)(Bridge Pattern)是一种设计模式,它将抽象和实现分离,使它们可以独立地变化.它通过一个大类或者一系列紧密关联的类拆分成两个独立的层次结构来实现这种分离,其中一个层次结构包含抽象类或接口,另一个层次结构包含实现类.桥梁模式使得抽象类和实现类可以独立地变化,从而实现了松耦合.
(资料图片仅供参考)
在Java中,桥梁模式通常使用接口来定义抽象部分,使用抽象类来实现部分实现,并将它们通过组合的方式组合起来.抽象部分包含一个只想实现部分的引用,实现部分实现了抽象部分定义的接口.
Java桥梁模式分为以下四种角色:
抽象化角色(Abstraction):定义抽象化的接口,维护一个指向实现化对象的引用.扩展抽象化角色(Refined Abstraction):扩展抽象化角色,通常是抽象化角色的子类,实现抽象化角色中的业务方法.实现化角色(Implementor):定义实现化角色的接口,这个接口不一定要与抽象化角色的接口完全一致,事实上,这两个接口可以完全不同.具体实现化角色(Concrete Implementor):具体实现化角色实现实现化角色接口,并完成具体的业务逻辑.实现
例如,在电商网站中,可能需要支持多种支持方式,如支付宝,微信支付和银联支付等.使用桥梁模式可以轻松地添加或切换不同的支付方式,以满足用户的需求.
实现化角色
public interface PaymentImplementor { /** * 支付 * * @param amount */ void processPayment(double amount); }
具体实现化角色
public class AliPaymentImplementor implements PaymentImplementor { /** * 支付 * * @param amount */ @Override public void processPayment(double amount) { System.out.println("支付宝支付:" + amount + "元..."); } } public class WechatPaymentImplementor implements PaymentImplementor { /** * 支付 * * @param amount */ @Override public void processPayment(double amount) { System.out.println("微信支付:" + amount + "元..."); } } public class UnionpayPaymentImplementor implements PaymentImplementor { /** * 支付 * * @param amount */ @Override public void processPayment(double amount) { System.out.println("银联支付:" + amount + "元..."); } }
抽象化角色
public abstract class Payment { protected PaymentImplementor implementor; public Payment(PaymentImplementor implementor) { this.implementor = implementor; } /** * 支付 * * @param amount */ public abstract void pay(double amount); }
扩展化抽象角色
public class OnlinePayment extends Payment{ public OnlinePayment(PaymentImplementor implementor) { super(implementor); } /** * 支付 * * @param amount */ @Override public void pay(double amount) { System.out.println("开始在线支付..."); implementor.processPayment(amount); System.out.println("在线支付完成..."); } }
测试
public class Demo { public static void main(String[] args) { // 支付宝支付 PaymentImplementor paymentImplementor = new AliPaymentImplementor(); Payment payment = new OnlinePayment(paymentImplementor); payment.pay(100); System.out.println(); // 微信支付 paymentImplementor = new WechatPaymentImplementor(); payment = new OnlinePayment(paymentImplementor); payment.pay(101); System.out.println(); // 银联支付 paymentImplementor = new UnionpayPaymentImplementor(); payment = new OnlinePayment(paymentImplementor); payment.pay(102); } }
这段代码是一个简单的实现了桥梁模式的示例.其中,Payment是抽象类,OnlinePayment是其子类,PaymentImplementor是接口,AliPaymentImplementor,UnionpayPaymentImplementor和WechatPaymentImplementor都是其实现类.通过这种方式,Payment类PayImplementor接口被解耦,可以独立地发展和扩展.
在这个示例中,Payment类是抽象化,不能被实例化,而是通过OnlinePayment子类进行实例化.OnlinePayment子类重写了pay方法,并调用implementor.processPayment方法,该方法由实现PaymentImplementor接口的类来是心啊,例如,AliPaymentImplementor,UnionpayPaymentImplementor和WechatPaymentImplementor.这种方式使得PaymentImplementor接口的实现类可以动态地注入到OnlinePayment类中,从而实现了不同的支付方式,而不需要修改OnlinePayment类.
总结
优点
分离抽象和实现部分,使得它们可以独立变化,从而增加了系统的灵活性和可扩展性.通过抽象接口来管理对象之间的关系,更加符合面向对象编程的原则,使得系统更加易于维护和理解.桥梁模式可以避免使用继承造成的类爆炸问题,因为它似乎用了组合关系.缺点
桥梁模式增加了系统的复杂性,需要额外的抽象层,可能会导致系统的设计变得复杂.如果不恰当地设计桥梁接口和实现类,可能会导致系统的耦合度增加.应用场景
当一个类具有多个变化维度(例如,一个形状类有不同的颜色和尺寸)时,可以使用桥梁模式来将它们分离开来,从而使得系统更加灵活.当需要支持不同平台,数据库或协议时,可以使用桥梁模式来封装这些实现细节,使得客户端和实现部分可以独立变化,而不影响彼此.当需要运行时动态地切换实现时,可以使用桥梁模式来实现这种切换.到此这篇关于Java桥梁设计模式优雅地将抽象与实现分离的文章就介绍到这了,更多相关Java桥梁设计模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
关键词:
您可能也感兴趣:
为您推荐
中信信托常春藤股票精选1期年内跌14.24%
永不起火!全球首创S24!鹏辉能源实现储能电芯技术新突破
贵州茅台今日大宗交易溢价成交33.06万股,成交额5.59亿元
排行
最近更新
- Java桥梁设计模式优雅地将抽象与实现分离
- 腾讯旗下财付通支付科技有限公司被罚没近30亿元
- 并不是只有披头散发坐在地上嚎啕大哭才是悲痛
- 永泰能源:7月7日公司高管常胜秋、窦红平、曹体伦增持公司股...
- 违抗父命!乔丹儿子再为皮蓬前妻庆生,合照尺度真大,要结婚了吗
- 支付宝、财付通收央行巨额罚单,分别被罚没超30亿和近30亿
- 桂林市农科中心科技特派员赴永福县开展“科技服务夏管促增产...
- 牵手门处罚结果来了! 中国石油北京项目管理公司:给予胡继勇...
- 千元续航怪兽!荣耀X50设计“美得不像千元机”
- 萤石网络携算法商店亮相2023世界人工智能大会
- 每日精选:在唐山怀孕6个月打掉需要多少钱{唐山妇科医院}
- 【十佳排名】太原哪家医院人流专家好?
- 商务部解读世贸组织投资便利化协定谈判成果
- 乡村需要体育,体育需要乡村(体坛观澜)
- 西班牙奔牛节开幕
- 坐在飞机靠窗位置,竟会严重伤害皮肤?
- 巧姐最后嫁给了板儿?是怎么回事?
- 上半年证券私募收益率3% 六成产品实现正收益
- 襄州区总工会召开2023年“法院+人社+工会”协调会
- 医疗保险大学生在老家缴费还是在校缴费?是否必须交?
- 关羽临死之前喊出八个字,曹操大喜,刘备直接损失75万的兵马
- WEB TheTV访谈大熊和奏部分上
- 关于宁波中信银行的一些信息
- 稳外贸外资,深圳出台“金融支持外贸24条”
- 制造黑暗战士的5大BOSS,一位欲停止时间,一位多次攻打光之国!
- 蚂蚁集团发布公告:收到金融管理部门行政处罚决定书,对此诚...
- 购买坐便助立器需注重支架良好的稳定性和包裹性
- 美财长耶伦抵京第一餐吃云南菜,点了四份见手青
- 春光科技: 公司主要从事清洁电器软管、配件产品及整机ODM/OE...
- 国家外汇管理局:截至2023年6月末我国外汇储备规模为31930亿美元