设计模式之适配器模式

适配器模式:用于解决两个系统之间的不兼容问题,解决两个接口之间的链接问题;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等格式的媒体文件,因为这些格式的文件,遵循不一样的格式,因此必须有一个适配器,使其适应于不一样格式文件的读取与播放

相关文章
相关标签/搜索