設計模式之適配器模式

適配器模式:用於解決兩個系統之間的不兼容問題,解決兩個接口之間的鏈接問題;ide

目標:將一個類的接口更改成適配另外一個類的接口,而且使這些不兼容的類一塊兒工做。this

最佳解決方案:二者實現同一個接口或者繼承自同一個抽象類spa

類圖UML翻譯

 

 實例:code

例若有一個抽象類Player是籃球運動員,該類姓名屬性,具備兩個方法Attack(),Dfend(),如今中國籃球運動員姚明,調到美國NBA,可是他聽不懂教練的語言,只能配翻譯,blog

翻譯在這個地方就是適配器繼承

 

 Player抽象類接口

public abstract class Player {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public abstract void Attack();

    public abstract void Dfend();
}

繼承自Player的USAPlayerget

public class USAPlayer extends Player {

    public USAPlayer(String name){
        super.setName(name);
    }

    @Override
    public String getName() {
        return super.getName();
    }

    @Override
    public void setName(String name) {
        super.setName(name);
    }

    @Override
    public void Attack() {
        System.out.println(super.getName()+"正在Attack....");
    }

    @Override
    public void Dfend() {
        System.out.println(super.getName()+"正在Dfend....");
    }
}

如今中國運動員的類class

public class ChinaPlayer {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public void ChinaAttack(){
System.out.println(this.getName()+"進攻....");
}

public void ChinaDfend(){
System.out.println(this.getName()+"防守....");
}
}

爲了使教練組可以像調用Player同樣ChinaPlayer類

使用翻譯類

public class Translater extends Player {

    private ChinaPlayer chinaPlayer =new ChinaPlayer();

    public Translater(String name){
        chinaPlayer.setName(name);
    }

    @Override
    public String getName() {
        return chinaPlayer.getName();
    }

    @Override
    public void setName(String name) {
        chinaPlayer.setName(name);
    }

    @Override
    public void Attack() {
        chinaPlayer.ChinaAttack();
    }

    @Override
    public void Dfend() {
        chinaPlayer.ChinaDfend();
    }
}

主程序代碼

public class Main {

    public static void main(String[] args) {

        Player p1=new USAPlayer("Jordan");

        Player p2=new USAPlayer("James");

        Player p3=new Translater("姚明");

        p1.Attack();
        p1.Dfend();
        p2.Attack();
        p2.Dfend();
        p3.Attack();
        p3.Dfend();
    }
}

運行效果

 

 核心目的,解決兩個不兼容的類直接兼容的問題。

相似的還有好比用播放器播放MP3,MP4,AVI等格式的媒體文件,因爲這些格式的文件,遵循不一樣的格式,因此必須有一個適配器,使其適應於不一樣格式文件的讀取與播放

相關文章
相關標籤/搜索