| 
 適配器模式把一個(gè)類的接口變換成客戶端所期待的另一個(gè)接口,從而使原本因接口不匹配而無法在一起工作的兩個(gè)類能夠在一起工作。比如我們突然就想看電影了,但是這個(gè)電影是AVI格式的,目前我們開發(fā)的Player播放器只能播放Mp4格式的,那么我們就得對這款落后的Player進(jìn)行版本升級,通過Adapter適配器就可以實(shí)現(xiàn)既可以播放AVI格式的、也可以播放Mp4,這個(gè)適配器既可以播放原有的Mp4,也可以提供AVI接口。 Adapter:適配器 Adaptee:被適配的對象,就是Player Target:客戶端理想的接口,就是可以播Mp4,也可以播放AVI接口 
    
 public interface TargetPlayer {
    public void playMp4();
    public void playAVI();
}
public class AdpateePlayer {
    public void playMp4(){
        System.out.println("can play mp4");
    }
}
public class Adapter extends AdpateePlayer implements TargetPlayer {
    public void playAVI() {
        System.out.println("can play avi");
    }
}
public class AdapterMain {
    public static void main(String[] args) {
        Adapter adapter=new Adapter();
        adapter.playAVI();
        adapter.playMp4();
    }
}
 
 
 public interface TargetPlayer {
    public void playMp4();
    public void playAVI();
}
public interface AdapteePlayer {
    public void playMp4();
}
public class AdapteePlayerImpl implements AdapteePlayer {
    public void playMp4() {
        System.out.println("can play mp4");
    }
}
public class Adapter implements TargetPlayer{
    private AdapteePlayer adapteePlayer;
    public void setAdapteePlayer(AdapteePlayer adapteePlayer) {
        this.adapteePlayer = adapteePlayer;
    }
    public void playMp4() {
        adapteePlayer.playMp4();
    }
    public void playAVI() {
        System.out.println("can play avi");
    }
}
public class AdapterMain {
    public static void main(String[] args) {
        Adapter adapter=new Adapter();
        AdapteePlayer adapteePlayer=new AdapteePlayerImpl();
        adapter.setAdapteePlayer(adapteePlayer);
        adapter.playAVI();
        adapter.playMp4();
    }
}
 小編為了突出對象適配器的好,將待適配器對象實(shí)現(xiàn)既寫了接口又寫了實(shí)現(xiàn),很明顯對象適配器很靈活,可以動(dòng)態(tài)的傳入不同的待適配的對象,而類適配器是靜態(tài)的類繼承,后期不可以修改,很死板。 
 適配器作用就是講一個(gè)接口適配到另一個(gè)接口,在Java 的I/O類庫中有很多這樣的需求,如將字符串?dāng)?shù)據(jù)轉(zhuǎn)變成字節(jié)數(shù)據(jù)保存到文件中,將字節(jié)數(shù)據(jù)轉(zhuǎn)變成流數(shù)據(jù)等。 以InputStreamReader和OutputStreamWriter類為例。 InputStreamReader和OutputStreamWriter類分別繼承了Reader和writer接口,但是要?jiǎng)?chuàng)建他們的對象必須在構(gòu)造函數(shù)中傳入一個(gè)InputStream和OutputStream的實(shí)例,InputStreamReader和OutputStreamWriter類的作用也就是將InputStream和OutputStream適配到Reader和Writer。 適配器是InputStreamReader,源角色是InputStream代表的實(shí)例對象,目標(biāo)接口就是Reader類。 InputStreamReader 將字節(jié)流轉(zhuǎn)換為字符流。是字節(jié)流通向字符流的橋梁。如果不指定字符集編碼,該解碼過程將使用平臺默認(rèn)的字符編碼,如:GBK。來源:https://www./content-1-263451.html | 
|  |