橋接模式是一種對(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();
}
}