適配器模式
結構型模式涉及到如何組合類和對象以獲得更大的結構,適配器模式使結構型模式中的一種,它的目的是要使得一個接口與其他接口兼容,從而給出了多個不同接口的統一抽象,我們在JAVA 的Swing模塊中有很多應用了適配器模式的示例。適配器模式中有兩種方式,分別是類的適配器模式(採用繼承實現)和對象適配器(採用對象組合方式實現)
定義
將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。
使用場景
1.當你想使用一個已經存在的類,而它的接口不符合你的需求。
2.當你想創建一個可以複用的類,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協同工作。
3.當你想使用一些已經存在的子類,但是不可能對每一個都進行子類化以匹配它們的接口。對象適配器可以適配它的父類接口。
結構
類適配器結構圖
對象適配器結構圖
實現
類適配器的實現(通過繼承實現)
public class Adaptee {
public void requestB(){
System.out.println("this is requestB");
}
}
public interface Target {
void requestA();
}
public class Adapter extends Adaptee implements Target{
public void requestA() {
System.out.println("this is requestA");
}
}
對象適配器的實現(通過對象組合)
public class Adapter implements Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee){
this.adaptee = adaptee;
}
public void requestA() {
System.out.println("this is requestA");
}
public void requestB() {
adaptee.requestB();;
}
}
適配器模式雖然給我們提供了更好的複用性以及擴展性,但是物極必反,過多的使用適配器,會讓系統非常零亂,不易整體進行把握。比如,明明看到調用的是A接口,其實內部被適配成了B接口的實現,一個系統如果太多出現這種情況,無異於一場災難。因此如果不是很有必要,可以不使用適配器,而是直接對系統進行重構。