適配器模式:
目的:適配器暴露符合外界規範的接口,該接口的具體實現經過調用被適配對象的相應方法來完成。
應用:系統須要使用現有的一個類,可是這個類的接口不符合系統的須要,此時就須要新增一個適配器來解決這個問題。this
角色:
目標接口:符合外界規範的接口
源對象(被適配的對象):提供相應的功能,可是接口的規範不符合外界的要求
適配器:暴露符合外界規範的接口,經過調用被適配對象的相應方法,而後對其結果進行必定加工來實現。
jdk中的適配器模式:
/**
* 目標接口:Reader。
* 說明:Reader的目標是讀取數據,可是隻能按照字符來讀取。
* 源對象(被適配的對象):InputStream的子類
* 說明:InputStream能夠讀數據,可是隻能按字節來讀取
* 適配器:InputStreamReader
* 說明:InputStreamReader經過InputStream來讀取數據,而且將讀取到的字節流轉換爲字符流,而後提供給Reader進行讀取。
*/
public class InputStreamReader extends Reader {code
// StreamDecoder裏面封裝了InputStream對象,即InputStreamReader間接地封裝了InputStream對象。
private final StreamDecoder sd;對象
/**
* 將源對象(被適配的對象)傳入進來,這裏源對象能夠是InputStream的任何一個子類。
*/
public InputStreamReader(InputStream in) {
super(in);
try {
sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // 將in封裝到sd中。
} catch (UnsupportedEncodingException e) {
// The default encoding should always be available
throw new Error(e);
}
}
// 按照字符來讀取數據
public int read() throws IOException {
return sd.read(); // 使用in來讀取數據,而後將讀取到的字節流轉換爲字符流後,再去讀取。
}
}接口