將一類的接口轉換成客戶希望的另外一個接口,Adapter模式使得原本由於接口不兼容而不能一起工作那些類可以一起工作。
適用情況:
使用的前提是:接口中規定了所有要實現的方法; 但一個要實現此接口的具體類,只用到了其中的幾個方法,而其它的方法都是沒有用的。
實現方法:
用一個抽象類實現已有的接口,並實現接口中所規定的所有方法,這些方法的實現可以都是空方法;
原本要實現接口的子類,只實現上面的抽象類即可,並在其內部實現時,只對其感興趣的方法進行實現;
類圖:
角色:
目標接口(Target): 客戶所期待的接口。目標可以是具體的或抽象的類,也可以是接口。
需要適配的類(Adaptee): 需要適配的類或適配者類。
適配器(Adapter): 通過包裝一個需要適配的對象,把原接口轉換成目標接口。
實例:
public interface Target
{
public void request();
}
public class Adaptee
{
public void specialRequest()
{
System.out.println("this is special request");
}
}
public class Adapter implements Target
{
Adaptee adaptee = new Adaptee();
@Override
public void request()
{
adaptee.specialRequest();
}
}
public class Client
{
public static void main(final String[] args)
{
final Target adapter = new Adapter();
adapter.request();
}
}
主要內容:
1) 類適配器
當客戶在接口中定義了他期望的行爲時,我們就可以應用適配器模式,提供一個實現該接口的類,並且擴展已有的類,通過創建子類來實現適配。
2)對象適配器
對象適配器通過組合除了滿足"用戶期待的接口"還降低了代碼間的不良耦合。
3)缺省適配器
缺省適配器模式是一種特殊的適配器模式,但這個適配器是由一個抽象類實現的,並且在抽象類中要實現目標接口中所規定的所有方法,但很多方法的實現都是空方法,而具體的子類都要繼承此抽象類。