什么是适配器

在使用监听器的时候, 需要定义一个类事件监听器接口,通常接口中有多个方法, 而程序中不一定所有的都用到, 但又必须重写, 这很繁琐,适配器简化了这些操作, 我们定义监听器时只要继承适配器, 然后重写需要的方法即可。

适配器原理

适配器就是一个类, 实现了监听器接口, 所有抽象方法都重写了, 但是方法全是空的。
适配器类需要定义成抽象的,因为创建该类对象,调用空方法是没有意义的,目的就是为了简化程序员的操作, 定义监听器时继承适配器, 只重写需要的方法就可以了。

演示

  1. /**
  2. * 模拟监听器接口
  3. *
  4. * @author axin
  5. * @date 2022/5/14
  6. */
  7. public interface ProcessListener {
  8. /**
  9. * 创建前
  10. */
  11. void beforeCreate();
  12. /**
  13. * 创建后
  14. */
  15. void afterCreate();
  16. /**
  17. * 保存前
  18. */
  19. void beforeSave();
  20. /**
  21. * 保存后
  22. */
  23. void afterSave();
  24. /**
  25. * 完成前
  26. */
  27. void beforeComplete();
  28. /**
  29. * 完成后
  30. */
  31. void afterComplete();
  32. }
/**
 *  ProcessListener类的适配类,
 *
 *  声明为抽象:
 *  声明为抽象类的原因是创建本类对象也没有意义,方法都是空方法
 *
 * @author axin
 * @date 2022/5/14
 */
public abstract class ProcessAdapter implements ProcessListener{

    @Override
    public void beforeCreate() {

    }

    @Override
    public void afterCreate() {

    }

    @Override
    public void beforeSave() {

    }

    @Override
    public void afterSave() {

    }

    @Override
    public void beforeComplete() {

    }

    @Override
    public void afterComplete() {

    }
}
public class Application {

    private ProcessListener listener;

    public Application(ProcessListener listener) {
        this.listener = listener;
    }

    public static void main(String[] args) {

        /**
         * 使用接口创建匿名内部类时,需要重写所有的方法
         */
        new Application(new ProcessListener() {
            @Override
            public void beforeCreate() {

            }

            @Override
            public void afterCreate() {

            }

            @Override
            public void beforeSave() {

            }

            @Override
            public void afterSave() {

            }

            @Override
            public void beforeComplete() {

            }

            @Override
            public void afterComplete() {

            }
        });

    }


}
public class Application {

    private ProcessListener listener;

    public Application(ProcessListener listener) {
        this.listener = listener;
    }

    public static void main(String[] args) {

        /**
         * 使用装饰类创建匿名内部类时,只需要重写要使用的方法
         */
        new Application(new ProcessAdapter() {
            @Override
            public void afterSave() {
                //TODO
            }
        });

    }


}