適配器模式:ide
把一個類的接口變換成客戶端所能接受的另外一種接口,從而使兩個接口不匹配而沒法再一塊兒工做的兩個類可以在一塊兒工做。函數
注:能夠研究inputStreamReader。this
現有兩個接口Target Adaptee。Traget接口有方法showInfo(),Adaptee接口有方法info()。編碼
package com.zhao.service; /** * Target(目標接口):所要轉換的所期待的接口 * @author zhao * */ public interface Target { public void showInfo(); }
package com.zhao.service; /** * 須要適配的接口 * @author zhao * */ public interface Adaptee { public String info(); }
如今的狀況是,Target接口和Adaptee接口沒法在一塊兒工做,可是Target接口須要用到Adaptee接口,否則沒法顯示信息。因此須要一個適配器。spa
package com.zhao.service.impl; import com.zhao.service.Adaptee; import com.zhao.service.Target; public class Adaper implements Target { private Adaptee adaptee; public Adaper(Adaptee adaptee) { this.adaptee=adaptee; } @Override public void showInfo() { System.out.println(adaptee.info()); } }
當須要顯示信息時,在主方法裏:code
package com.zhao.main; import com.zhao.service.Target; import com.zhao.service.impl.Adaper; import com.zhao.service.impl.AdapteeImpl; public class Main { public static void main(String[] args) { Target target=new Adaper(new AdapteeImpl()); target.showInfo(); } }
AdapettImpl繼承了接口Adaptee。對象
package com.zhao.service.impl; import com.zhao.service.Adaptee; public class AdapteeImpl implements Adaptee{ @Override public String info() { return "zhao"; } }
由此能夠看出:適配器主要是爲了整合兩個實現類,他們各自實現了一個接口,這兩個接口並不能一塊兒工做,以致於兩個類不能一塊兒工做,咱們能夠把其中的一個類用做適配器類,它實現了本身的接口,重寫了相應的方法。在此時,給它添加了一個另一個接口的對象,經過構造函數或者是setter方法,傳進來另外接口的實現類,在適配器類重寫的方法中,進行對另外接口方法的操做。blog
(如下內容摘自 許令波《深刻分析Java Web技術內幕》)繼承
InputStreamReader實現了Reader接口,而且持有了InputStream的引用,這裏是經過StreamDecoder類簡介持有的,由於從byte到char要通過編碼。很顯然,適配器就是InputStreamReader類,源角色就是InputStream表明的實例對象,目標接口就是Reader類。接口