public interface Target {
public void method1();
}
适配器(Adaptee )
public class Adaptee {
public void method2() {
System.out.println("目标方法被调用");
}
}
适配器(Adapter )
public class Adapter extends Adaptee implements Target {
@Override
public void method1() {
this.method2();
}
}
客户端(Client)
public class Client {
public static void main(String[] args) {
Target target = new Adapter();
target.method1();
}
}
执行结果
目标方法被调用
2、采用对象组合的方式(只需要修改两个地方):
适配器(Adapter )
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adapter) {
this.adaptee = adapter;
}
@Override
public void method1() {
this.adaptee.method2();
}
}
客户端(Client)
public class Client {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.method1();
}
}
3、缺省的适配器模式(当只需要某个接口中的某一个方法的时候,采用这种模式)
适配器接口
public interface Service {
public void method1();
public void method2();
public void method3();
}
接口实现
package org.ml.adapter.qs;
public class ServicerAdapter implements Service {
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
}
假设只需要接口的method2()方法
public class NeedService extends ServicerAdapter {
@Override
public void method2() {
System.out.println("采用了缺省适配器模式调用方法");
}
}
4、缺省用例:
package org.ml.adapter.qs;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
public class Main {
JFrame frame = new JFrame();
public Main() {
frame.setSize(500, 300);
frame.setVisible(true);
// 鼠标动作监听
frame.addMouseMotionListener(new MouseAdapter() {
// 在此处采用适配器模式,只需要mouseMoved方法
@Override
public void mouseMoved(MouseEvent e) {
System.out.println("(x:" + e.getX() + ",y:" + e.getY() + ")");
}
});
frame.addWindowListener(new WindowAdapter() {
// 同样,此处也采用适配器模式,只需要调用windowClosing方法
@Override
public void windowClosing(WindowEvent e) {
System.out.println("窗口现在已经关闭");
System.exit(0);
}
});
}
public static void main(String[] args) {
new Main();
}
}