最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設計模式之橋接模式的示例詳解

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

定義

橋梁模式是對象的結構模式。又稱為柄體(Handle and Body)模式或接口(Interface)模式。橋梁模式的用意是“將抽象化(Abstraction)與實現化(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{

}

定義微信消息實現類

/**
 * 發(fā)送消息的實現接口
 * @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消息實現類

/**
 * 發(fā)送消息的實現接口
 * @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();
    }
}

測試結果

方案二

定義發(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ā)送消息實現類

/**
 * 發(fā)送消息的實現接口
 * @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ā)送消息統一接口

/**
 * 發(fā)送消息統一接口
 * @author:liyajie
 * @createTime:2022/2/21 10:41
 * @version:1.0
 */
public interface SendMsgImplementor {

     void sendMsg();
}

定義微信發(fā)送消息實現類

/**
 * 微信發(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ā)送消息實現類

/**
 * 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();
    }
}

測試結果

對比分析

方案一,即一般實現方式,微信和QQ兩種發(fā)送消息的方式需要同時去實現CommonMsg和AbstractSendMsgService兩個接口中的方法,耦合性較高;另外比如新增緊急消息的發(fā)送或者新增短信的方式發(fā)送消息的需求,改動較多,擴展性較差。

方案二,為橋接模式實現方式,在消息類的構造方法中傳入接口SendMsgImplementor,從而使發(fā)送消息的抽象和具體實現進行了分離,實現了解耦;后期新增緊急消息的發(fā)送或者新增短信的方式發(fā)送消息的需求,也只需要新增緊急消息類和短信發(fā)送類即可,和QQ,微信等發(fā)送消息互不影響,擴展方便,符合開閉原則,復用原則。

總結

橋梁模式分離了抽象部分和實現部分,從而極大地提供了系統的靈活性。讓抽象部分和實現部分獨立出來,分別定義接口,這有助于對系統進行分層,從而產生更好的結構化的系統。

橋梁模式使得抽象部分和實現部分可以分別獨立地擴展,而不會相互影響,從而大大提高了系統的可擴展性。

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

相關文章

  • Java中Object用法詳解

    Java中Object用法詳解

    Java是面向對象的編程語言,而在面向對象中,所有的Java類都有一個共同的祖先類,這就是Object,那么Object都有哪些特性呢?今天小編就簡單跟大家分析一下,感興趣的同學可以跟著小編一起學習
    2023-05-05
  • Java?C++題解leetcode1441用棧操作構建數組示例

    Java?C++題解leetcode1441用棧操作構建數組示例

    這篇文章主要為大家介紹了Java?C++題解leetcode1441用棧操作構建數組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Java案例之隨機驗證碼功能實現實例

    Java案例之隨機驗證碼功能實現實例

    本篇文章主要介紹了Java案例之隨機驗證碼功能實現實例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 10道springboot常見面試題

    10道springboot常見面試題

    這篇文章主要為大家詳細介紹了10道springboot常見面試題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • SpringBoot+Mybatis分頁插件PageHelper實現分頁效果

    SpringBoot+Mybatis分頁插件PageHelper實現分頁效果

    這篇文章主要介紹了SpringBoot+Mybatis實現分頁效果,本案例是采用Mybatis分頁插件PageHelper實現,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • java數學歸納法非遞歸求斐波那契數列的方法

    java數學歸納法非遞歸求斐波那契數列的方法

    這篇文章主要介紹了java數學歸納法非遞歸求斐波那契數列的方法,涉及java非遞歸算法的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • SpringBoot+Mybatis+Vue 實現商品模塊的crud操作

    SpringBoot+Mybatis+Vue 實現商品模塊的crud操作

    這篇文章主要介紹了SpringBoot+Mybatis+Vue 實現商品模塊的crud操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 如何使用 Spring Boot 和 Canal 實現 MySQL 數據庫同步

    如何使用 Spring Boot 和 Canal 實現 My

    本文介紹了如何使用SpringBoot和Canal實現MySQL數據庫之間的數據同步,通過配置主庫、創(chuàng)建Canal用戶、配置CanalServer以及開發(fā)SpringBoot客戶端,實現了將主庫的數據實時同步到多個從庫,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • 純Java代碼實現流星劃過天空

    純Java代碼實現流星劃過天空

    本文給大家介紹純java代碼實現流星劃過天空,包括流星個數,流星飛行的速度,色階,流星大小相關變量設置。對java流星劃過天空特效代碼感興趣的朋友可以參考下本文
    2015-10-10
  • JavaWeb中Tomcat底層機制和Servlet運行原理詳解

    JavaWeb中Tomcat底層機制和Servlet運行原理詳解

    這篇文章主要介紹了JavaWeb中Tomcat底層機制和Servlet運行原理詳解,Tomcat是一個開源的Java Web服務器,它是基于Java Servlet和JavaServer Pages(JSP)技術的,下面是關于Tomcat底層機制和Servlet運行原理的簡要說明,需要的朋友可以參考下
    2023-10-10

最新評論

五峰| 万安县| 姜堰市| 嘉祥县| 广昌县| 徐汇区| 河北区| 历史| 宁陕县| 车致| 五家渠市| 呼伦贝尔市| 镇康县| 武功县| 兴义市| 通化县| 灵川县| 岳西县| 伊金霍洛旗| 上饶市| 民勤县| 商水县| 巴中市| 延边| 朔州市| 邵东县| 广平县| 栖霞市| 田林县| 剑河县| 五寨县| 怀来县| 饶阳县| 炎陵县| 隆子县| 甘肃省| 黄大仙区| 沭阳县| 嘉荫县| 龙井市| 南岸区|