https://en.wikipedia.org/wiki/Adapter_pattern

Client使用的是接口. 参考JDK中的LinkedList(https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html). LinkedList类实现了java.util.Queue接口, 使用offer和poll入队出队1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import java.util.Queue;
import java.util.LinkedList;
public class TestQueue {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<String>();
queue.offer("Hello");
queue.offer("World!");
System.out.println(queue.size());
String str;
while((str=queue.poll())!=null){
System.out.print(str);
}
System.out.println();
System.out.println(queue.size());
}
}
LinkedList另外实现了其他接口Deque<E>, List<E>等.
Java是单继承, 可以认为是用其他接口的方法实现Queue接口, 也属于Class Adapter.
wiki中另外两幅图

Client直接使用Adapter类. 参考JDK中的MouseAdapter(https://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseAdapter.html)1
2public abstract class MouseAdapter extends Object
implements MouseListener, MouseWheelListener, MouseMotionListener
使用方式如下(http://www.yiibai.com/swing/swing_mouseadapter.html)1
2
3
4
5
6
7
8
9
10JLabel msglabel
= new JLabel("Welcome to TutorialsPoint SWING Tutorial."
,JLabel.CENTER);
msglabel.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
statusLabel.setText("Mouse Clicked: ("
+e.getX()+", "+e.getY() +")");
}
});
MouseAdapter有方法体, 但里面为空. 如果单独实现MouseListener, MouseWheelListener等接口, 那么必须实现所有的方法. 有了MouseAdapter, 在子类中就可以只关心那些需要的事件处理方法.