溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中的橋接模式怎么用

發(fā)布時間:2021-07-24 10:50:40 來源:億速云 閱讀:156 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“java中的橋接模式怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“java中的橋接模式怎么用”吧!

1. 模式的定義

消息分為普通消息,加急消息,特急消息多種,不同的消息類型,業(yè)務(wù)功能處理是不一樣的,現(xiàn)在要實現(xiàn)這樣發(fā)送提示消息的功能,該如何實現(xiàn)呢?

如何才能既實現(xiàn)功能,又能靈活地擴展呢?

橋接模式的定義: 
將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。

2. UML圖

java中的橋接模式怎么用 
Abstraction:抽象部分的接口,通常在這個對象中,要維護一個實現(xiàn)部分的對象引用,抽象對象里面的方法,需要調(diào)用實現(xiàn)部分的對象來完成。

RefinedAbstraction:擴展抽象部分的接口,通常在這些對象中,定義跟實際業(yè)務(wù)相關(guān)的方法。

Implementor:定義實現(xiàn)部分的接口,通常由Implementor接口提供基本的操作,Abstraction中定義的是基于這些基本操作的業(yè)務(wù)方法

concreteImplementor:真正實現(xiàn)Implementor接口的對象

//抽象部分就是各個消息的類型所對應(yīng)的功能,而實現(xiàn)部分就是各種發(fā)送消息的方式/**

 * 實現(xiàn)發(fā)送消息的統(tǒng)一接口

 */public interface MessageImplementor {

    /**

     * 發(fā)送消息

     * @param message 要發(fā)送的消息內(nèi)容

     * @param toUser 把消息發(fā)送的目的人員

     */

    public void send(String message,String toUser);

}/**

 * 以站內(nèi)短消息的方式發(fā)送消息

 */public  class MessageSMS implements MessageImplementor{


    public void send(String message, String toUser) {

        System.out.println("使用站內(nèi)短消息的方式,發(fā)送消息'"+message+"'給"+toUser);

    }

}/**

 * 以Email的方式發(fā)送消息

 */public class MessageEmail implements MessageImplementor{


    public void send(String message, String toUser) {

        System.out.println("使用Email的方式,發(fā)送消息'"+message+"'給"+toUser);

    }


}/**

 * 以手機短消息的方式發(fā)送消息

 */public  class MessageMobile implements MessageImplementor{


    public void send(String message, String toUser) {

        System.out.println("使用手機短消息的方式,發(fā)送消息'"+message+"'給"+toUser);

    }

}/**

 * 抽象的消息對象

 */public abstract class AbstractMessage {

    /**

     * 持有一個實現(xiàn)部分的對象

     */

    protected MessageImplementor impl;    /**

     * 構(gòu)造方法,傳入實現(xiàn)部分的對象 

     * @param impl 實現(xiàn)部分的對象

     */

    public AbstractMessage(MessageImplementor impl){        this.impl = impl;

    }    /**

     * 發(fā)送消息,轉(zhuǎn)調(diào)實現(xiàn)部分的方法

     * @param message 要發(fā)送的消息內(nèi)容

     * @param toUser 把消息發(fā)送的目的人員

     */

    public void sendMessage(String message,String toUser){        this.impl.send(message, toUser);

    }


}/**

 * 普通消息

 */public class CommonMessage extends AbstractMessage{

    public CommonMessage(MessageImplementor impl) {        super(impl);

    }    public void sendMessage(String message, String toUser) {        //對于普通消息,什么都不干,直接調(diào)用父類的方法,把消息發(fā)送出去就可以了

        super.sendMessage(message, toUser);

    }   

}/**

 * 加急消息

 */public class UrgencyMessage extends AbstractMessage{

    public UrgencyMessage(MessageImplementor impl) {        super(impl);

    }    public void sendMessage(String message, String toUser) {

        message = "加急:"+message;        super.sendMessage(message, toUser);

    }    /**

     * 監(jiān)控某消息的處理過程

     * @param messageId 被監(jiān)控的消息的編號

     * @return 包含監(jiān)控到的數(shù)據(jù)對象,這里示意一下,所以用了Object

     */

    public Object watch(String messageId) {        //獲取相應(yīng)的數(shù)據(jù),組織成監(jiān)控的數(shù)據(jù)對象,然后返回       

        return null;

    }   

}/**

 * 特急消息

 */public class SpecialUrgencyMessage extends AbstractMessage{


    public SpecialUrgencyMessage(MessageImplementor impl) {        super(impl);

    }    public void hurry(String messageId) {        //執(zhí)行催促的業(yè)務(wù),發(fā)出催促的信息

    }    public void sendMessage(String message, String toUser) {

        message = "特急:"+message;        super.sendMessage(message, toUser);        //還需要增加一條待催促的信息

    }

}public class Client {

    public static void main(String[] args) {        //創(chuàng)建具體的實現(xiàn)對象

        MessageImplementor impl = new MessageSMS();        //創(chuàng)建一個普通消息對象

        AbstractMessage m = new CommonMessage(impl);

        m.sendMessage("請喝一杯茶", "小李");        //創(chuàng)建一個緊急消息對象

        m = new UrgencyMessage(impl);

        m.sendMessage("請喝一杯茶", "小李");        //創(chuàng)建一個特急消息對象

        m = new SpecialUrgencyMessage(impl);

        m.sendMessage("請喝一杯茶", "小李");        //把實現(xiàn)方式切換成手機短消息,然后再實現(xiàn)一遍

        impl = new MessageMobile();


        m = new CommonMessage(impl);

        m.sendMessage("請喝一杯茶", "小李");


        m = new UrgencyMessage(impl);

        m.sendMessage("請喝一杯茶", "小李");


        m = new SpecialUrgencyMessage(impl);

        m.sendMessage("請喝一杯茶", "小李");

    }

}


3. 研磨設(shè)計模式

1) 什么是橋接?為何需要橋接?如何橋接?

  • 所謂橋接,通俗點就是在不同的東西之間搭一個橋,讓它們能夠連接起來,可以相互通訊和使用。

  • 為被分離了的抽象部分和實現(xiàn)部分來搭橋,只要讓抽象部分擁有實現(xiàn)部分的接口對象,就橋接上了

  • 為了達到讓抽象部分和實現(xiàn)部分都可以獨立變化的目的

  • 抽象部分的實現(xiàn)通常是需要調(diào)用實現(xiàn)部分的功能來實現(xiàn)的

2) 繼承是擴展對象功能的一種常見手段,通常情況下,繼承擴展的功能變化維度都是一維的。

3)由誰來橋接: 
就是誰來負(fù)責(zé)創(chuàng)建抽象部分和實現(xiàn)部分的關(guān)系,即誰來負(fù)責(zé)創(chuàng)建Implementor對象,并把它設(shè)置到抽象部分的對象中去。 
- 由客戶端負(fù)責(zé)創(chuàng)建Implementor,并在創(chuàng)建抽象部分對象的時候,把它設(shè)置到抽象部分的對象中 
- 可以抽象工廠或簡單工廠來選擇創(chuàng)建具體的Implementor對象,抽象部分的類可以通過工廠的方法來獲取Implementor對象 
- 使用IOC/DI容器來創(chuàng)建具體的Implementor對象,并注入到Abstraction中

4) 典型的例子 
JDBC:抽象部分是JDBC的API,具體實現(xiàn)式驅(qū)動程序 
java中的橋接模式怎么用

5)橋接模式的本質(zhì):分離抽象和實現(xiàn) 
只有把抽象部分和實現(xiàn)部分分離開,才能夠讓它們獨立地變化。

到此,相信大家對“java中的橋接模式怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI