JDK中的适配器模式

今天看了设计模式中的适配器模式,终于明白了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);
			}
			
		});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值