中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > J2SE
命令分派及事件监听器
作者:未知 时间:2005-07-24 21:13 出处:JR 责编:chinaitpower
              摘要:命令分派及事件监听器

在C和C++中程序员经常使用一些全局函数和函数指针代表一系列的命令或者操作,然后通过一个表格进行分派,例如:
  1.    #include <stdio.h>
  2.    
  3.    void func1() {printf("func1\n");}
  4.    
  5.    void func2() {printf("func2\n");}
  6.    
  7.    typedef void (*fp)(void);
  8.    
  9.    fp funcs[] = {&func1, &func2, 0};
  10.    
  11.    int main()
  12.    {
  13.       int i = 0;
  14.       
  15.       while (funcs[i])
  16.          funcs[i++]();
  17.       return 0;
  18.    }

但是Java的实现方式很不同。它没有指针也没有全局函数。Java创建和引用对象实例并通过对象调用相应的方法。具体如何实现呢?
  1. interface Action {
  2.   public void doit();
  3. }
  4. class func1 implements Action {
  5.   public void doit() {System.out.println("func1");}
  6. }
  7. class func2 implements Action {
  8.   public void doit() {System.out.println("func2");}
  9. }
  10. public class call {
  11.   private static Action alist[] = {
  12.     new func1(),
  13.     new func2()
  14.   };
  15.   public static void main(String args[])
  16.   {
  17.     for (int i = 0; i < alist.length; i++)
  18.       alist[i].doit();
  19.   }
  20. }

在这个例子中定义了一个接口Action,任何实现该接口的类都要定义并实现doit方法(这也是接口的基本意图)。然后可以用接口名指向那些类的对象实例。
在C++中Action应该是一个基类,带有func1和func2方法,对象操作可以通过基类的指针执行。在Java中一个 Action的引用支持相似的操作,即使Action不是func1和func2的超类。 

Java中称这个为方法封装器,并且和C/C++的方式很不相同。当然这其中也有一些权衡和折中,在一些给定的条件下这种方式会工作得更好。
第二个例子
方法封装器的另一个例子在AWT中使用得相当的多。
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. public class buttonlistener implements ActionListener {
  4.   public void actionPerformed(ActionEvent e)
  5.   {
  6.     System.exit(0);
  7.   }
  8.   public static void main(String args[])
  9.   {
  10.     Frame f = new Frame("testing");
  11.     Button b = new Button("OK");
  12.     b.addActionListener(new buttonlistener());
  13.     f.add(b);
  14.     f.pack();
  15.     f.setVisible(true);
  16.   }
  17. }

这个例子创建一个框架并有一个 OK按钮,当按钮被按下程序就终止。按钮被加入了一个动作监听器,动作监听器保证实现actionPerformed方法,因为buttonlistener实现ActionListener实现接口。点击按钮的结果是导致调用按钮的动作监听器。

最后,监听器的概念在AWT中是极度重要的。监听器的底层基础就是实现特定的接口因此一个监听器能够对应特定的已知方法调用。(这个在Swing中也是一样的)
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有