java設(shè)計(jì)模式07(橋接模式)

橋接模式是一種對(duì)象結(jié)構(gòu)型模式,它又被稱為柄體模式或接口模式。橋接模式用一種巧妙的方式處理多層繼承存在的問題,用抽象關(guān)聯(lián)取代了多層繼承,將類之間的靜態(tài)繼承關(guān)系轉(zhuǎn)換為動(dòng)態(tài)的對(duì)象組合關(guān)系,使得系統(tǒng)更加靈活,并易于擴(kuò)展,同時(shí)有效地控制了系統(tǒng)中類的個(gè)數(shù)。

橋接模式中將兩個(gè)獨(dú)立變化的維度設(shè)計(jì)為兩個(gè)獨(dú)立的繼承等級(jí)結(jié)構(gòu),在抽象層建立起一個(gè)抽象關(guān)聯(lián),該關(guān)聯(lián)關(guān)系類似一條連接兩個(gè)獨(dú)立繼承結(jié)構(gòu)的橋,故名橋接模式。

橋接模式的定義:將抽象部分與它的實(shí)現(xiàn)部分解耦,使得兩者都能夠獨(dú)立變化。

橋接模式的結(jié)構(gòu)與實(shí)現(xiàn):
1.Abstraction(抽象類):用于定義抽象類的接口,通常是抽象類,其中定義了一個(gè)Implementor(實(shí)現(xiàn)類接口)類型的對(duì)象并可以維護(hù)該對(duì)象,它與Implementor之間具有關(guān)聯(lián)關(guān)系,既可以包含抽象業(yè)務(wù)方法,也可以包含具體業(yè)務(wù)。

public abstract class Abstraction {
    
    public Implementor implementor;
    
    public void setImplementor(Implementor implementor) {
        this.implementor = implementor;
    }
    
    public abstract void operation();

}

2.Implementor(實(shí)現(xiàn)類接口):Implementor接口僅提供基本操作,而Abstraction定義的接口可能會(huì)做更多的復(fù)雜操作。Implementor接口對(duì)這些基本操作進(jìn)行了聲明,而具體實(shí)現(xiàn)交給其子類。通過關(guān)聯(lián)關(guān)系,在Abstraction中不僅擁有自己的方法,還可以調(diào)用到Implementor中定義的方法,使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系。

public interface Implementor {

    public void operationImpl();
}

3.RefinedAbstraction(擴(kuò)充抽象類):為具體實(shí)現(xiàn)類,實(shí)現(xiàn)了在Abstraction中聲明的抽象業(yè)務(wù)方法,而且會(huì)取調(diào)用在Implementor中定義的業(yè)務(wù)方法。

public class RefinedAbstraction extends Abstraction {

    @Override
    public void operation() {
        //調(diào)用具體實(shí)現(xiàn)
        implementor.operationImpl();
    }

}

4.ConcreteImplementor(具體實(shí)現(xiàn)類):實(shí)現(xiàn)了Implementor接口,在不同的具體實(shí)現(xiàn)類中提供不同的實(shí)現(xiàn),且提供給抽象類具體的業(yè)務(wù)操作方法。

public class ConcreteImplementor implements Implementor {

    @Override
    public void operationImpl() {
        System.out.println("橋接模式實(shí)現(xiàn)!");
    }

}

5.Test:

public class Test {

    public static void main(String[] args) {
        Implementor implementor=new ConcreteImplementor();
        RefinedAbstraction abstraction=new RefinedAbstraction();
        abstraction.setImplementor(implementor);
        abstraction.operation();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容