Adapter在J2SE事件處理中的應用
|
| Java關鍵字導航 |
| 網絡 J2ME 手機游戲 JavaCard Struts 游戲 分析器 JAAS EJB JavaMail 設計模式 J2EE |
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中的事件處理代碼示例如下:
| 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在本例中是適配目標。
適配目標為一接口,代碼如下:
| 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模式。