定義
將一個類的接口轉換成客戶希望的另一個接口
角色
目標接口(Target):定義客戶端使用的與特定領域相關的接口
需要適配的類(Adaptee):定義一個已經存在的接口,這個接口需要適配
適配器(Adapter):對Adaptee的接口與Target接口進行適配
優點
- 客戶端可以調用同一接口,因而對客戶端來說是透明的, 這樣做更簡單、更直接、更緊湊
- 複用了現存的類
- 通過引入一個適配器重用現有的Adaptee類,將目標類與Adaptee類解耦
缺點
- 更換適配器的實現過程比較複雜
適用場景
- 想使用一個已經存在的類, 但它的接口不符合你的需求
- 想創建一個可以複用的類,該類可以與其它不相關的類協同工作
- 兩個類所做的事情相似,但是具有不同接口時
類圖
package com.vapy.structure.Adapter;
/**
*
* @author vapy 2016年8月28日
*
*/
public interface Target {
void adapteeMethod();
void adapterMethod();
}
package com.vapy.structure.Adapter;
/**
*
* @author vapy 2016年8月28日
*
*/
public class Adaptee {
public void adapteeMethod() {
System.out.println("Adaptee method");
}
}
package com.vapy.structure.Adapter;
/**
*
* @author vapy 2016年8月28日
*
*/
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void adapteeMethod() {
adaptee.adapteeMethod();
}
@Override
public void adapterMethod() {
System.out.println("Adapter method");
}
}
package com.vapy.structure.Adapter;
/**
*
* @author vapy 2016年8月28日
*
*/
public class Client {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.adapteeMethod();
target.adapterMethod();
}
}
本文代碼可在github查看:點擊此處