JDK中的适配器模式

来源:互联网 发布:单片机中断系统代码 编辑:程序博客网 时间:2024/05/06 17:26

今天看了设计模式中的适配器模式,终于明白了java在添加事件时为什么要老是用到继承xxxAdapter了。


首先说说适配器是什么东西吧,网站上到处都有,就不多说了。主要有三种适配器:1、类适配器。2、对象适配器。3、双向适配器。

下面是一个简单的对象适配器的类图



下面具体讲下适配器模式在JDK中的实例

JDK中有很多Adapter类,如WindowAdapter,MouserAdapter等,它们分别实现了WindowsListerner,MouseListener等接口,这些都是类适配器的使用实例。


MouseListener 类


package java.awt.event;import java.util.EventListener;public interface MouseListener extends EventListener {    /**     * Invoked when the mouse button has been clicked (pressed     * and released) on a component.     */    public void mouseClicked(MouseEvent e);    /**     * Invoked when a mouse button has been pressed on a component.     */    public void mousePressed(MouseEvent e);    /**     * Invoked when a mouse button has been released on a component.     */    public void mouseReleased(MouseEvent e);    /**     * Invoked when the mouse enters a component.     */    public void mouseEntered(MouseEvent e);    /**     * Invoked when the mouse exits a component.     */    public void mouseExited(MouseEvent e);}

由MouseListener类的源码可知,应用接口中充斥着大量的方法,编程者如果要实现这些接口就必须实现所有的方法,而实际中,我们往往又并不需要所有的方法,这样就会有很多的方法是空的。这样不仅是一件很麻烦的事,也影响阅读。为此,JDK通过接口Adapter类为这些接口方法提供一个默认的空方法。如下面的MouseAdapter类。

MouseAdapter类

package java.awt.event;public abstract class MouseAdapter implements MouseListener, MouseWheelListener, MouseMotionListener {    /**     * {@inheritDoc}     */    public void mouseClicked(MouseEvent e) {}    /**     * {@inheritDoc}     */    public void mousePressed(MouseEvent e) {}    /**     * {@inheritDoc}     */    public void mouseReleased(MouseEvent e) {}    /**     * {@inheritDoc}     */    public void mouseEntered(MouseEvent e) {}    /**     * {@inheritDoc}     */    public void mouseExited(MouseEvent e) {}    /**     * {@inheritDoc}     * @since 1.6     */    public void mouseWheelMoved(MouseWheelEvent e){}    /**     * {@inheritDoc}     * @since 1.6     */    public void mouseDragged(MouseEvent e){}    /**     * {@inheritDoc}     * @since 1.6     */    public void mouseMoved(MouseEvent e){}}

MouseAdapter类实现了各种鼠标监听器的接口,编程时只需要继承这个类然后实现你所需要的接口即可。代码如下:

private class KeyMonitor extends KeyAdapter{public void keyPressed(KeyEvent e) {myTank.keyPress(e);}public void keyReleased(KeyEvent e) {myTank.keyReleased(e);}}


在实际中我们往往采用匿名类的方式,代码如下:

this.addWindowListener(new WindowAdapter(){/** * 窗口关闭事件 */public void windowClosing(WindowEvent e) {System.exit(0);}});
原创粉丝点击