什么是适配器模式(Adapter)?

116 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程

  1. 意图
    代码复用,使用现有的接口或类的功能为新的接口提供服务。即,将已经存在的接口或类引入到适配器中用来为新的功能提供服务。(注意,前提是新接口与原有接口或类不兼容)
  2. 类图
    在这里插入图片描述
  3. 实例
// 新接口
interface NewInf{
    void play(String type, String name);
}
// 已经存在的接口
interface ExistInf{
    void play1(String name);
    void play2(String name);
}
// 已经存在的接口实现类
class ExistClass implements ExistInf{
    public void play1(String name) {
        System.out.println("play1 "+name);
    }

    public void play2(String name) {
        System.out.println("play2 "+name);
    }
}
// 适配器
class MyAdapter implements NewInf{
    ExistInf existInf;
    public MyAdapter(ExistInf existInf){
        this.existInf = existInf;
    }

    public void play(String type, String name) {
        if("1".equals(type)){
            existInf.play1(name);
        }else if("2".equals(type)){
            existInf.play2(name);
        }
    }
}
// 新接口的实现类
class UseClass implements NewInf{
    MyAdapter myAdapter; //为了尽量避免继承,所以使用成员变量的形式引入MyAdapter
    public UseClass(MyAdapter myAdapter){
       this.myAdapter = myAdapter;
    }
    public void play(String type, String name) {
        if("3".equals(type)){
            System.out.println("play3 "+name);
        }else {
            myAdapter.play(type, name);
        }
    }
}
  1. 测试
class Test2{
    public static void main(String[] args){
        // 调用新接口
        NewInf newInf = new UseClass(new MyAdapter(new ExistClass()));
        newInf.play("1", "name1");
        newInf.play("3", "name3");
        newInf.play("2", "name2");
    }
}

运行结果:

play1 name1
play3 name3
play2 name2

想看更多吗?请访问:设计模式