Java設計模式之橋接模式的示例詳解
定義
橋梁模式是對象的結(jié)構(gòu)模式。又稱為柄體(Handle and Body)模式或接口(Interface)模式。橋梁模式的用意是“將抽象化(Abstraction)與實現(xiàn)化(Implementation)脫耦,使得二者可以獨立地變化”。
案例
需求
通過企業(yè)微信和qq的方式給員工發(fā)送消息
方案一
定義發(fā)送消息的接口
/** * 發(fā)送消息的接口 * @author:liyajie * @createTime:2022/2/21 10:33 * @version:1.0 */ public interface AbstractSendMsgService { // 發(fā)送消息 public void sendMsg(); }
定義普通消息接口
/** * 普通消息接口 * @author:liyajie * @createTime:2022/2/21 11:32 * @version:1.0 */ public interface CommonMsg extends AbstractSendMsgService{ }
定義微信消息實現(xiàn)類
/** * 發(fā)送消息的實現(xiàn)接口 * @author:liyajie * @createTime:2022/2/21 10:35 * @version:1.0 */ public class WxMsgServiceImpl implements CommonMsg{ @Override public void sendMsg() { System.out.println("老板使用微信給你發(fā)了消息,快去接收吧"); } }
定義QQ消息實現(xiàn)類
/** * 發(fā)送消息的實現(xiàn)接口 * @author:liyajie * @createTime:2022/2/21 10:35 * @version:1.0 */ public class QqMsgServiceImpl implements CommonMsg{ @Override public void sendMsg() { System.out.println("老板使用QQ給你發(fā)了消息,快去接收吧"); } }
定義測試類
/** * 測試類 * @author:liyajie * @createTime:2022/2/21 10:37 * @version:1.0 */ public class Test { public static void main(String[] args) { new WxMsgServiceImpl().sendMsg(); new QqMsgServiceImpl().sendMsg(); } }
測試結(jié)果
方案二
定義發(fā)送消息抽象接口
/** * 發(fā)送消息的抽象接口 * @author:liyajie * @createTime:2022/2/21 10:33 * @version:1.0 */ public abstract class NewAbstractSendMsgService { protected SendMsgImplementor sendMsgImplementor; public NewAbstractSendMsgService(SendMsgImplementor sendMsgImplementor){ this.sendMsgImplementor = sendMsgImplementor; } // 微信 public void sendMsg(){ this.sendMsgImplementor.sendMsg(); } }
定義發(fā)送消息實現(xiàn)類
/** * 發(fā)送消息的實現(xiàn)接口 * @author:liyajie * @createTime:2022/2/21 10:35 * @version:1.0 */ public class NewSendMsgServiceImpl extends NewAbstractSendMsgService{ public NewSendMsgServiceImpl(SendMsgImplementor sendMsgImplementor) { super(sendMsgImplementor); } @Override public void sendMsg() { super.sendMsg(); } }
定義發(fā)送消息統(tǒng)一接口
/** * 發(fā)送消息統(tǒng)一接口 * @author:liyajie * @createTime:2022/2/21 10:41 * @version:1.0 */ public interface SendMsgImplementor { void sendMsg(); }
定義微信發(fā)送消息實現(xiàn)類
/** * 微信發(fā)送消息 * @author:liyajie * @createTime:2022/2/21 10:45 * @version:1.0 */ public class WxImplementor implements SendMsgImplementor{ @Override public void sendMsg() { System.out.println("老板使用微信給你發(fā)了消息,快去接收吧"); } }
定義QQ發(fā)送消息實現(xiàn)類
/** * QQ發(fā)送消息 * @author:liyajie * @createTime:2022/2/21 10:45 * @version:1.0 */ public class QqImplementor implements SendMsgImplementor{ @Override public void sendMsg() { System.out.println("老板使用QQ給你發(fā)了消息,快去接收吧"); } }
定義測試類
/** * 測試類 * @author:liyajie * @createTime:2022/2/21 10:37 * @version:1.0 */ public class TestNew { public static void main(String[] args) { NewSendMsgServiceImpl newSendMsgService = new NewSendMsgServiceImpl(new QqImplementor()); newSendMsgService.sendMsg(); NewSendMsgServiceImpl newSendMsgService2 = new NewSendMsgServiceImpl(new WxImplementor()); newSendMsgService2.sendMsg(); } }
測試結(jié)果
對比分析
方案一,即一般實現(xiàn)方式,微信和QQ兩種發(fā)送消息的方式需要同時去實現(xiàn)CommonMsg和AbstractSendMsgService兩個接口中的方法,耦合性較高;另外比如新增緊急消息的發(fā)送或者新增短信的方式發(fā)送消息的需求,改動較多,擴展性較差。
方案二,為橋接模式實現(xiàn)方式,在消息類的構(gòu)造方法中傳入接口SendMsgImplementor,從而使發(fā)送消息的抽象和具體實現(xiàn)進行了分離,實現(xiàn)了解耦;后期新增緊急消息的發(fā)送或者新增短信的方式發(fā)送消息的需求,也只需要新增緊急消息類和短信發(fā)送類即可,和QQ,微信等發(fā)送消息互不影響,擴展方便,符合開閉原則,復用原則。
總結(jié)
橋梁模式分離了抽象部分和實現(xiàn)部分,從而極大地提供了系統(tǒng)的靈活性。讓抽象部分和實現(xiàn)部分獨立出來,分別定義接口,這有助于對系統(tǒng)進行分層,從而產(chǎn)生更好的結(jié)構(gòu)化的系統(tǒng)。
橋梁模式使得抽象部分和實現(xiàn)部分可以分別獨立地擴展,而不會相互影響,從而大大提高了系統(tǒng)的可擴展性。
到此這篇關于Java設計模式之橋接模式的示例詳解的文章就介紹到這了,更多相關Java橋接模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring?Cloud實現(xiàn)灰度發(fā)布的示例代碼
這篇文章主要為大家詳細介紹了Spring?Cloud實現(xiàn)灰度發(fā)布的相關知識,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下2023-09-09SpringBoot使用Async注解失效原因分析及解決(spring異步回調(diào))
這篇文章主要介紹了SpringBoot使用Async注解失效原因分析及解決(spring異步回調(diào)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10MyBatis如何使用PageHelper實現(xiàn)分頁查詢
這篇文章主要介紹了MyBatis如何使用PageHelper實現(xiàn)分頁查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Java?循環(huán)隊列/環(huán)形隊列的實現(xiàn)流程
循環(huán)隊列又叫環(huán)形隊列,是一種特殊的隊列。循環(huán)隊列解決了隊列出隊時需要將所有數(shù)據(jù)前移一位的問題。本文將帶大家詳細了解循環(huán)隊列如何實現(xiàn),需要的朋友可以參考一下2022-02-02Java中java.lang.ClassCastException異常原因以及解決方法詳解
這篇文章主要給大家介紹了關于Java中java.lang.ClassCastException異常原因以及解決方法的相關資料,ClassCastException從字面上看是類型轉(zhuǎn)換錯誤,通常是進行強制類型轉(zhuǎn)換時候出的錯誤,需要的朋友可以參考下2024-02-02