Java設(shè)計(jì)模式之橋接模式的示例詳解
定義
橋梁模式是對(duì)象的結(jié)構(gòu)模式。又稱為柄體(Handle and Body)模式或接口(Interface)模式。橋梁模式的用意是“將抽象化(Abstraction)與實(shí)現(xiàn)化(Implementation)脫耦,使得二者可以獨(dú)立地變化”。
案例
需求
通過企業(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{
}定義微信消息實(shí)現(xiàn)類
/**
* 發(fā)送消息的實(shí)現(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消息實(shí)現(xiàn)類
/**
* 發(fā)送消息的實(shí)現(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ā)了消息,快去接收吧");
}
}定義測(cè)試類
/**
* 測(cè)試類
* @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();
}
}測(cè)試結(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ā)送消息實(shí)現(xiàn)類
/**
* 發(fā)送消息的實(shí)現(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ā)送消息實(shí)現(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ā)送消息實(shí)現(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ā)了消息,快去接收吧");
}
}定義測(cè)試類
/**
* 測(cè)試類
* @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();
}
}測(cè)試結(jié)果

對(duì)比分析
方案一,即一般實(shí)現(xiàn)方式,微信和QQ兩種發(fā)送消息的方式需要同時(shí)去實(shí)現(xiàn)CommonMsg和AbstractSendMsgService兩個(gè)接口中的方法,耦合性較高;另外比如新增緊急消息的發(fā)送或者新增短信的方式發(fā)送消息的需求,改動(dòng)較多,擴(kuò)展性較差。
方案二,為橋接模式實(shí)現(xiàn)方式,在消息類的構(gòu)造方法中傳入接口SendMsgImplementor,從而使發(fā)送消息的抽象和具體實(shí)現(xiàn)進(jìn)行了分離,實(shí)現(xiàn)了解耦;后期新增緊急消息的發(fā)送或者新增短信的方式發(fā)送消息的需求,也只需要新增緊急消息類和短信發(fā)送類即可,和QQ,微信等發(fā)送消息互不影響,擴(kuò)展方便,符合開閉原則,復(fù)用原則。
總結(jié)
橋梁模式分離了抽象部分和實(shí)現(xiàn)部分,從而極大地提供了系統(tǒng)的靈活性。讓抽象部分和實(shí)現(xiàn)部分獨(dú)立出來,分別定義接口,這有助于對(duì)系統(tǒng)進(jìn)行分層,從而產(chǎn)生更好的結(jié)構(gòu)化的系統(tǒng)。
橋梁模式使得抽象部分和實(shí)現(xiàn)部分可以分別獨(dú)立地?cái)U(kuò)展,而不會(huì)相互影響,從而大大提高了系統(tǒng)的可擴(kuò)展性。
到此這篇關(guān)于Java設(shè)計(jì)模式之橋接模式的示例詳解的文章就介紹到這了,更多相關(guān)Java橋接模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例
這篇文章主要為大家介紹了Java?C++題解leetcode1441用棧操作構(gòu)建數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Java案例之隨機(jī)驗(yàn)證碼功能實(shí)現(xiàn)實(shí)例
本篇文章主要介紹了Java案例之隨機(jī)驗(yàn)證碼功能實(shí)現(xiàn)實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
SpringBoot+Mybatis分頁插件PageHelper實(shí)現(xiàn)分頁效果
這篇文章主要介紹了SpringBoot+Mybatis實(shí)現(xiàn)分頁效果,本案例是采用Mybatis分頁插件PageHelper實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11
java數(shù)學(xué)歸納法非遞歸求斐波那契數(shù)列的方法
這篇文章主要介紹了java數(shù)學(xué)歸納法非遞歸求斐波那契數(shù)列的方法,涉及java非遞歸算法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
SpringBoot+Mybatis+Vue 實(shí)現(xiàn)商品模塊的crud操作
這篇文章主要介紹了SpringBoot+Mybatis+Vue 實(shí)現(xiàn)商品模塊的crud操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
如何使用 Spring Boot 和 Canal 實(shí)現(xiàn) My
本文介紹了如何使用SpringBoot和Canal實(shí)現(xiàn)MySQL數(shù)據(jù)庫之間的數(shù)據(jù)同步,通過配置主庫、創(chuàng)建Canal用戶、配置CanalServer以及開發(fā)SpringBoot客戶端,實(shí)現(xiàn)了將主庫的數(shù)據(jù)實(shí)時(shí)同步到多個(gè)從庫,感興趣的朋友跟隨小編一起看看吧2025-02-02
JavaWeb中Tomcat底層機(jī)制和Servlet運(yùn)行原理詳解
這篇文章主要介紹了JavaWeb中Tomcat底層機(jī)制和Servlet運(yùn)行原理詳解,Tomcat是一個(gè)開源的Java Web服務(wù)器,它是基于Java Servlet和JavaServer Pages(JSP)技術(shù)的,下面是關(guān)于Tomcat底層機(jī)制和Servlet運(yùn)行原理的簡(jiǎn)要說明,需要的朋友可以參考下2023-10-10

