Adapter模式在事件处理中的应用

Adapter模式在事件处理中的应用

  1. Adapter模式理论
    Adapter模式又称变压器模式,关于该模式的基本概念请参考其他书籍或资料;这里我们只粗略讨论该模式两大实现方法的区别:基于类的Adapter模式和基于对象的Adapter模式。
    基于类的Adapter模式的一般结构如下:Adaptee类为Adapter的父类,Adaptee类为适配源,适配目标(接口)也是Adapter的父类;基于类的Adapter模式比较适合应用于Adapter想修改Adaptee的部分方法的情况。基于对象的Adapter模式的一般结构如下:Adaptee类对象为Adapter所依赖,适配目标(接口)是Adapter的父类;基于对象的Adapter模式比较适合应用于Adapter想为Adaptee添加新的方法的情况。但在Adaptee类的方法与Adapter类的方法不同名而实现相同功能的情况下,我们一般也使用基于对象的Adapter模式,在J2SE事件处理中,我们就大量使用了基于对象的Adapter模式。

 

2.J2SE中的事件处理
    J2SE中的事件处理代码示例如下:

Java代码 复制代码
  1. public class WebFormDesigner extends JFrame {   
  2. void jbInit() throws Exception {   
  3. text.addActionListener(new WebFormDesigner_text_actionAdapter(this));   
  4. }   
  5. void text_actionPerformed(ActionEvent e) {   
  6. TextDialog createText = new TextDialog();   
  7. createText.setVisible(true);   
  8. createText.setTitle("TEXT");   
  9. createText.setBounds(100100500300);   
  10. createText.setModal(true);   
  11. createText.show();   
  12. }   
  13. }   
  14. class WebFormDesigner_text_actionAdapter implements java.awt.event.ActionListener {   
  15. WebFormDesigner adaptee;   
  16. WebFormDesigner_text_actionAdapter(WebFormDesigner adaptee) {   
  17. this.adaptee = adaptee;   
  18. }   
  19. public void actionPerformed(ActionEvent e) {   
  20. adaptee.text_actionPerformed(e);   
  21. }   
  22. }  
public class WebFormDesigner extends JFrame {
void jbInit() throws Exception {
text.addActionListener(new WebFormDesigner_text_actionAdapter(this));
}
void text_actionPerformed(ActionEvent e) {
TextDialog createText = new TextDialog();
createText.setVisible(true);
createText.setTitle("TEXT");
createText.setBounds(100, 100, 500, 300);
createText.setModal(true);
createText.show();
}
}
class WebFormDesigner_text_actionAdapter implements java.awt.event.ActionListener {
WebFormDesigner adaptee;
WebFormDesigner_text_actionAdapter(WebFormDesigner adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.text_actionPerformed(e);
}
}


    在实际编程时,text_actionPerformed方法由程序员自己实现(弹出新的对话框),而WebFormDesigner_text_actionAdapter类是由开发环境依据基于对象的Adapter模式自动生成的。

3.Adapter模式与代码分析
    由上面的分析可见,WebFormDesigner在本例中是Adaptee, WebFormDesigner_text_actionAdapter在本例中是Adapter, java.awt.event.ActionListener在本例中是适配目标。
    适配目标为一接口,代码如下:

Java代码 复制代码
  1. public interface ActionListener extends EventListener {   
  2. /**  
  3. * Invoked when an action occurs.  
  4. */  
  5. public void actionPerformed(ActionEvent e);   
  6. }  
public interface ActionListener extends EventListener {
/**
* Invoked when an action occurs.
*/
public void actionPerformed(ActionEvent e);
}


    适配目标中只有一个方法:actionPerformed()。由于WebFormDesigner_text_actionAdapter 实现了java.awt.event.ActionListener,所以要求实现actionPerformed()方法。
    WebFormDesigner_text_actionAdapter实现actionPerformed()方法是引用了WebFormDesigner这个adaptee而完成的。从代码中可以看出,WebFormDesigner是WebFormDesigner_text_actionAdapter的方法的参数,所以WebFormDesigner_text_actionAdapter依赖WebFormDesigner。
    Adaptee类(WebFormDesigner)的方法(text_actionPerformed)与Adapter类(WebFormDesigner_text_actionAdapte)的方法(actionPerformed)不同名而实现相同功能,这就是我们上面分析的基于对象的Adapter模式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值