Java設計模式之橋接模式的示例詳解
定義
橋梁模式是對象的結構模式。又稱為柄體(Handle and Body)模式或接口(Interface)模式。橋梁模式的用意是“將抽象化(Abstraction)與實現化(Implementation)脫耦,使得二者可以獨立地變化”。
案例
需求
通過企業微信和qq的方式給員工發送消息
方案一
定義發送消息的接口
/** * 發送消息的接口 * @author:liyajie * @createTime:2022/2/21 10:33 * @version:1.0 */ public interface AbstractSendMsgService { // 發送消息 public void sendMsg(); }
定義普通消息接口
/** * 普通消息接口 * @author:liyajie * @createTime:2022/2/21 11:32 * @version:1.0 */ public interface CommonMsg extends AbstractSendMsgService{ }
定義微信消息實現類
/** * 發送消息的實現接口 * @author:liyajie * @createTime:2022/2/21 10:35 * @version:1.0 */ public class WxMsgServiceImpl implements CommonMsg{ @Override public void sendMsg() { System.out.println("老板使用微信給你發瞭消息,快去接收吧"); } }
定義QQ消息實現類
/** * 發送消息的實現接口 * @author:liyajie * @createTime:2022/2/21 10:35 * @version:1.0 */ public class QqMsgServiceImpl implements CommonMsg{ @Override public void sendMsg() { System.out.println("老板使用QQ給你發瞭消息,快去接收吧"); } }
定義測試類
/** * 測試類 * @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(); } }
測試結果
方案二
定義發送消息抽象接口
/** * 發送消息的抽象接口 * @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(); } }
定義發送消息實現類
/** * 發送消息的實現接口 * @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(); } }
定義發送消息統一接口
/** * 發送消息統一接口 * @author:liyajie * @createTime:2022/2/21 10:41 * @version:1.0 */ public interface SendMsgImplementor { void sendMsg(); }
定義微信發送消息實現類
/** * 微信發送消息 * @author:liyajie * @createTime:2022/2/21 10:45 * @version:1.0 */ public class WxImplementor implements SendMsgImplementor{ @Override public void sendMsg() { System.out.println("老板使用微信給你發瞭消息,快去接收吧"); } }
定義QQ發送消息實現類
/** * QQ發送消息 * @author:liyajie * @createTime:2022/2/21 10:45 * @version:1.0 */ public class QqImplementor implements SendMsgImplementor{ @Override public void sendMsg() { System.out.println("老板使用QQ給你發瞭消息,快去接收吧"); } }
定義測試類
/** * 測試類 * @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(); } }
測試結果
對比分析
方案一,即一般實現方式,微信和QQ兩種發送消息的方式需要同時去實現CommonMsg和AbstractSendMsgService兩個接口中的方法,耦合性較高;另外比如新增緊急消息的發送或者新增短信的方式發送消息的需求,改動較多,擴展性較差。
方案二,為橋接模式實現方式,在消息類的構造方法中傳入接口SendMsgImplementor,從而使發送消息的抽象和具體實現進行瞭分離,實現瞭解耦;後期新增緊急消息的發送或者新增短信的方式發送消息的需求,也隻需要新增緊急消息類和短信發送類即可,和QQ,微信等發送消息互不影響,擴展方便,符合開閉原則,復用原則。
總結
橋梁模式分離瞭抽象部分和實現部分,從而極大地提供瞭系統的靈活性。讓抽象部分和實現部分獨立出來,分別定義接口,這有助於對系統進行分層,從而產生更好的結構化的系統。
橋梁模式使得抽象部分和實現部分可以分別獨立地擴展,而不會相互影響,從而大大提高瞭系統的可擴展性。
到此這篇關於Java設計模式之橋接模式的示例詳解的文章就介紹到這瞭,更多相關Java橋接模式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!