<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Java橋樑模式(也稱橋接模式)(Bridge Pattern)是一種設計模式,它將抽象和實現分離,使它們可以獨立地變化.它通過一個大類或者一系列緊密關聯的類拆分成兩個獨立的層次結構來實現這種分離,其中一個層次結構包含抽象類或介面,另一個層次結構包含實現類.橋樑模式使得抽象類和實現類可以獨立地變化,從而實現了鬆耦合.
在Java中,橋樑模式通常使用介面來定義抽象部分,使用抽象類來實現部分實現,並將它們通過組合的方式組合起來.抽象部分包含一個只想實現部分的參照,實現部分實現了抽象部分定義的介面.
Java橋樑模式分為以下四種角色:
例如,在電商網站中,可能需要支援多種支援方式,如支付寶,微信支付和銀聯支付等.使用橋樑模式可以輕鬆地新增或切換不同的支付方式,以滿足使用者的需求.
實現化角色
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橋樑設計模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45