欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式之橋接模式的示例詳解

 更新時(shí)間:2022年02月21日 14:01:47   作者:溫故知新之java  
橋梁模式是對象的結(jié)構(gòu)模式。又稱為柄體(Handle and Body)模式或接口(Interface)模式。本文將通過示例來詳細(xì)講解一下這個模式,感興趣的可以學(xué)習(xí)一下

定義

橋梁模式是對象的結(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ā)了消息,快去接收吧");
    }
}

定義測試類

/**
 * 測試類
 * @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ā)送消息實(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ā)了消息,快去接收吧");
    }
}

定義測試類

/**
 * 測試類
 * @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é)果

對比分析

方案一,即一般實(shí)現(xiàn)方式,微信和QQ兩種發(fā)送消息的方式需要同時(shí)去實(shí)現(xiàn)CommonMsg和AbstractSendMsgService兩個接口中的方法,耦合性較高;另外比如新增緊急消息的發(fā)送或者新增短信的方式發(fā)送消息的需求,改動較多,擴(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ú)立出來,分別定義接口,這有助于對系統(tǒng)進(jìn)行分層,從而產(chǎn)生更好的結(jié)構(gòu)化的系統(tǒng)。

橋梁模式使得抽象部分和實(shí)現(xiàn)部分可以分別獨(dú)立地?cái)U(kuò)展,而不會相互影響,從而大大提高了系統(tǒng)的可擴(kuò)展性。

到此這篇關(guān)于Java設(shè)計(jì)模式之橋接模式的示例詳解的文章就介紹到這了,更多相關(guān)Java橋接模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java虛擬機(jī)類加載器之雙親委派機(jī)制模型案例

    Java虛擬機(jī)類加載器之雙親委派機(jī)制模型案例

    這篇文章主要介紹了Java虛擬機(jī)類加載器之雙親委派機(jī)制模型案例,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Spring?Cloud實(shí)現(xiàn)灰度發(fā)布的示例代碼

    Spring?Cloud實(shí)現(xiàn)灰度發(fā)布的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Spring?Cloud實(shí)現(xiàn)灰度發(fā)布的相關(guān)知識,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-09-09
  • SpringBoot使用Async注解失效原因分析及解決(spring異步回調(diào))

    SpringBoot使用Async注解失效原因分析及解決(spring異步回調(diào))

    這篇文章主要介紹了SpringBoot使用Async注解失效原因分析及解決(spring異步回調(diào)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot文件分片上傳的示例代碼

    SpringBoot文件分片上傳的示例代碼

    分片上傳在很多地方都可以使用的到,本文主要介紹了SpringBoot文件分片上傳的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • MyBatis如何使用PageHelper實(shí)現(xiàn)分頁查詢

    MyBatis如何使用PageHelper實(shí)現(xiàn)分頁查詢

    這篇文章主要介紹了MyBatis如何使用PageHelper實(shí)現(xiàn)分頁查詢,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java?循環(huán)隊(duì)列/環(huán)形隊(duì)列的實(shí)現(xiàn)流程

    Java?循環(huán)隊(duì)列/環(huán)形隊(duì)列的實(shí)現(xiàn)流程

    循環(huán)隊(duì)列又叫環(huán)形隊(duì)列,是一種特殊的隊(duì)列。循環(huán)隊(duì)列解決了隊(duì)列出隊(duì)時(shí)需要將所有數(shù)據(jù)前移一位的問題。本文將帶大家詳細(xì)了解循環(huán)隊(duì)列如何實(shí)現(xiàn),需要的朋友可以參考一下
    2022-02-02
  • WebService教程詳解(一)

    WebService教程詳解(一)

    WebService,顧名思義就是基于Web的服務(wù)。它使用Web(HTTP)方式,接收和響應(yīng)外部系統(tǒng)的某種請求,接下來通過本文給大家介紹WebService教程詳解(一),對webservice教程感興趣的朋友一起學(xué)習(xí)吧
    2016-03-03
  • Sentinel中實(shí)現(xiàn)限流的兩種方法

    Sentinel中實(shí)現(xiàn)限流的兩種方法

    本文給大家介紹了Sentinel中實(shí)現(xiàn)限流的兩種方法,限流是一種通過控制系統(tǒng)對外提供的資源、服務(wù)或接口的訪問數(shù)量或速率,以保護(hù)系統(tǒng)免受過載的一種策略,需要的朋友可以參考下
    2024-02-02
  • Java中java.lang.ClassCastException異常原因以及解決方法詳解

    Java中java.lang.ClassCastException異常原因以及解決方法詳解

    這篇文章主要給大家介紹了關(guān)于Java中java.lang.ClassCastException異常原因以及解決方法的相關(guān)資料,ClassCastException從字面上看是類型轉(zhuǎn)換錯誤,通常是進(jìn)行強(qiáng)制類型轉(zhuǎn)換時(shí)候出的錯誤,需要的朋友可以參考下
    2024-02-02
  • Java去掉小數(shù)點(diǎn)后面無效0的方案與建議

    Java去掉小數(shù)點(diǎn)后面無效0的方案與建議

    當(dāng)前小數(shù)點(diǎn)后面的位數(shù)過多的時(shí)候,多余的0沒有實(shí)際意義,下面這篇文章主要給大家介紹了關(guān)于Java去掉小數(shù)點(diǎn)后面無效0的方案與建議,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評論