设计模式《四》_适配器模式

你离开我真会死。 提交于 2020-02-10 04:34:55

主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。解决兼容性问题。

关键代码:适配器继承或依赖已有的对象,实现想要的目标接口。

使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。

 

 

 

接口:MusicPlayer :

 

public interface MusicPlayer {
    
    /**
     * @Author hsir
     * @Date 13:36 2019-7-16       
     * @Param [type, filename]音乐格式,文件
     * @return void
     **/
    public void play(String type,String filename);
}
PlayerAdapter:
public class PlayerAdapter implements MusicPlayer {
    //在适配器里面使用旧接口
    private ExistPlayer player;

    public PlayerAdapter(){
        player = new ExistPlayer();
    }



    @Override
    public void play(String type, String filename) {
        if (type == "mp3"){
            player.playMp3(filename);
        }else if (type == "wma"){
            player.playWma(filename);
        }
    }
}
已存在ExistPlayer类:
public class ExistPlayer {

    public void playMp3(String fileName){
        System.out.println("play mp3 : " + fileName);
    }

    public void playWma(String fileName){
        System.out.println("play wma : " + fileName);
    }
}

  测试类:DoSome

public class DoSome {

    public static void main(String[] args) {
        MusicPlayer player = new PlayerAdapter();

        player.play("mp3","a.mp3");
        player.play("wma","b.wma");
    }
}

 输出:

play mp3 : a.mp3
play wma : b.wma

 

优点: 1、可以让任何两个没有关联的类一起运行。 2、提高了类的复用。 3、增加了类的透明度。 4、灵活性好。

缺点: 1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。

使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。

注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。

 
 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!