Java中的橋接模式和適配器設(shè)計模式都屬于結(jié)構(gòu)型設(shè)計模式,它們的作用是將兩個不同的接口進(jìn)行轉(zhuǎn)化、適配,讓它們可以在一起工作。這兩種設(shè)計模式經(jīng)常用來解決軟件開發(fā)中的系統(tǒng)架構(gòu)問題。
橋接模式的核心思想是將抽象部分與它的實(shí)現(xiàn)部分分離開來,使它們可以獨(dú)立變化。換句話說,橋接模式的目的就是在組合關(guān)系中,讓一個對象的行為與另一個對象的實(shí)現(xiàn)進(jìn)行解耦。這樣一來,它們的改變互相不會影響到對方。
public abstract class Abstraction { private Implementor implementor; public Abstraction(Implementor implementor) { this.implementor = implementor; } abstract void operation(); } public interface Implementor { void operationImpl(); } public class ConcreteAbstraction1 extends Abstraction { public ConcreteAbstraction1(Implementor implementor) { super(implementor); } void operation() { implementor.operationImpl(); } } public class ConcreteImplementorA implements Implementor { public void operationImpl() { System.out.println("Concrete Implementor A"); } }
上面的代碼演示了橋接模式的一個例子,其中abstraction和implementor是兩個接口,abstraction接口有一個實(shí)現(xiàn)操作operation(),它通過調(diào)用implementor接口的實(shí)現(xiàn)操作operationImpl()來完成。在具體實(shí)現(xiàn)ConcreteAbstraction1中,實(shí)例化了一個implementor的對象實(shí)例,將其傳遞給了Abstraction的構(gòu)造函數(shù)(super(implementor)),然后在operation()中調(diào)用了implementor的實(shí)現(xiàn)操作operationImpl()。
與橋接模式相似的設(shè)計模式是適配器模式。適配器模式的主要思想是將一個類的接口轉(zhuǎn)換成客戶希望的另一個接口。適配器模式常用于將一個不方便直接使用的類適配成一個更方便使用的類。在適配器模式中,適配器就是一個充當(dāng)轉(zhuǎn)換器的中間件,在它的內(nèi)部實(shí)現(xiàn)中,可以調(diào)用一個或多個被適配類的接口方法來實(shí)現(xiàn)目標(biāo)接口。
public interface Target { void request(); } public class Adaptee { void specificRequest() { System.out.println("Adaptee specific request"); } } public class ClassAdapter extends Adaptee implements Target { public void request() { specificRequest(); } } public class ObjectAdapter implements Target { private Adaptee adaptee; public ObjectAdapter(Adaptee adaptee) { this.adaptee = adaptee; } public void request() { adaptee.specificRequest(); } }
適配器模式也是由一組接口和實(shí)現(xiàn)類組成的。其中,Target代表目標(biāo)接口,Adaptee代表被適配的類。在ClassAdapter中,Adaptee被繼承,并實(shí)現(xiàn)了Target接口;在ObjectAdapter中,Adaptee是作為適配器的一個屬性,并通過調(diào)用specificRequest方法來實(shí)現(xiàn)了request。兩種方法的最終效果都是將Adaptee的接口適配成了Target接口。