IT貓撲網:您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉貼|軟件發(fā)布

您當前所在位置: 首頁網絡編程PHP編程 → 實用:JAVA事件模式下PHP如何實現(xiàn)

實用:JAVA事件模式下PHP如何實現(xiàn)

時間:2015-06-28 00:00:00 來源:IT貓撲網 作者:網管聯(lián)盟 我要評論(0)

本文介紹了JAVA事件模式的PHP實現(xiàn)。在我以前的文章里,我概括了系統(tǒng)事件定義和使用call_user_func()函數建立php 事件模塊的例子。本文通過引入高級的基于sender/eventObject/listener的php事件模塊對這個科目進行了擴展。

下面是一個JAVA 事件系統(tǒng)的例子。這個例子基于Apache小組 開發(fā)的,來源于Apache.org并進行了重新縮短和重頂格式后的ProtocolCommandSupport.java, ProtocolCommandListener.java and ProtocolCommandEvent.java文件。ProtocolCommandSupport.java文件包含了事件創(chuàng)建類,類的實例由系統(tǒng)創(chuàng)建,當系統(tǒng)被實例調用時,就就會創(chuàng)建該事件。事實上這個類看上去就像包含了一個監(jiān)聽器---類監(jiān)聽到事件創(chuàng)建并且在事件創(chuàng)建被通知時進行反應。注意"addProtocolCommandListener" and "removeProtocolCommandListener"方法,他們用于附加和分離監(jiān)聽。另外2個方法fireCommandSent" and "fireReplyReceived",召喚了對象"__listeners"容器儲存的方法。該容器實際上,只積累了ProtocolCommandListener 對象,因為只有該對象在調用addProtocolCommandListener" and "removeProtocolCommandListener"方法時能夠被通過。

以下為引用的內容:

ProtocolCommandSupport.java

public class ProtocolCommandSupport implements Serializable {

private Object __source;

private ListenerList __listeners = new ListenerList();


public ProtocolCommandSupport(Object source) {

__source = source;

}

/***

* Fires a ProtocolCommandEvent signalling the sending of a command to all

* registered listeners.

***/

public void fireCommandSent(String command, String message) {

Enumeration en = __listeners.getListeners();

ProtocolCommandEvent event =

new ProtocolCommandEvent(__source, command, message);

ProtocolCommandListener listener;

while (en.hasMoreElements()) {

listener = (ProtocolCommandListener)en.nextElement();

listener.protocolCommandSent(event);

}

}

/***

* Fires a ProtocolCommandEvent signalling the reception of a command reply

* to all registered listeners.

***/

public void fireReplyReceived(int replyCode, String message) {

Enumeration en = __listeners.getListeners();

ProtocolCommandEvent event =

new ProtocolCommandEvent(__source, replyCode, message);

ProtocolCommandListener listener;

while (en.hasMoreElements()) {

listener = (ProtocolCommandListener)en.nextElement();

listener.protocolReplyReceived(event);

}

}

public void addProtocolCommandListener(ProtocolCommandListener listener) {
__listeners.addListener(listener);

}

public void removeProtocolCommandListener(ProtocolCommandListener listener) {

__listeners.removeListener(listener);

}

}

ProtocolCommandListener.java 包含了監(jiān)聽器接口。其后的含義是任何將要由ProtocolCommandSupport類認證的事件將要提供這個能夠實現(xiàn)一個足夠被事件認證接口。這就可能造成了一個新的種類,2個或更多不同的類被事件認證,因為一個類能夠實現(xiàn)多重接口。
ProtocolCommandListener.java

public interface ProtocolCommandListener extends EventListener {

以下為引用的內容:

/***

* This method is invoked by a ProtocolCommandEvent source after

* sending a protocol command to a server.

*

* @param event The ProtocolCommandEvent fired.

***/

public void protocolCommandSent(ProtocolCommandEvent event);

/***

* This method is invoked by a ProtocolCommandEvent source after

* receiving a reply from a server.

*

* @param event The ProtocolCommandEvent fired.

***/

public void protocolReplyReceived(ProtocolCommandEvent event);

}

本文的最后一個文件是ProtocolCommandEvent.java。這個文件包含了一個EventObject 類中的叫做ProtocolCommandEvent的子集。EventObject的子集用于通過從event producer到event listeners的事件數據。ProtocolCommandEvent 類增加了一個定義在EventObject中的getSource()方法,創(chuàng)建了creates the getMessage(), isReply(), isCommand(), getReplyCode() and getCommand()方法。這些方法只能返回給類一個只讀字段,只能在構造函數中設置。

以下為引用的內容:

ProtocolCommandEvent.java

public class ProtocolCommandEvent extends EventObject {

private int __replyCode;

private boolean __isCommand;

private String __message, __command;


public ProtocolCommandEvent(Object source, String command, String message) {

super(source);

__replyCode = 0;

__message = message;

__isCommand = true;

__command = command;

}

public ProtocolCommandEvent(Object source, int replyCode, String message) {

super(source);

__replyCode = replyCode;

__message = message;

__isCommand = false;

__command = null;

}

public String getCommand() { return __command; }

public int getReplyCode() { return __replyCode; }

public boolean isCommand() { return __isCommand; }

public boolean isReply() { return !isCommand(); }

public String getMessage() { return __message; }

}

?這3個文件組,只是JAVA事件系統(tǒng)的普通實現(xiàn)。也許把它應用于PHP程序是一個好的嘗試。

綜上而言,如下的說明能夠用于創(chuàng)建一個新的事件:

1. 創(chuàng)建一個EventObject 類的子類,用于給事件數據提供監(jiān)聽。通常命名為包含事件名稱和"event"結尾,就像ProtocolCommandEvent。這樣你以后可以重新使用已經存在的類甚至事件對象本身。

2. 創(chuàng)建或繼承一個用于實現(xiàn)監(jiān)聽的接口。通常接口名稱以"Listener"結尾并且包含1個或更多的被事件生成調用

關鍵詞標簽:Java,php

相關閱讀

文章評論
發(fā)表評論

熱門文章 plsql developer怎么連接數據庫-plsql developer連接數據庫方法 plsql developer怎么連接數據庫-plsql developer連接數據庫方法 2021年最好用的10款php開發(fā)工具推薦 2021年最好用的10款php開發(fā)工具推薦 php利用淘寶IP庫獲取用戶ip地理位置 php利用淘寶IP庫獲取用戶ip地理位置 在 PHP 中使用命令行工具 在 PHP 中使用命令行工具

相關下載

    人氣排行 詳解ucenter原理及第三方應用程序整合思路、方法 plsql developer怎么連接數據庫-plsql developer連接數據庫方法 PHP中防止SQL注入攻擊 PHP會話Session的具體使用方法解析 PHP運行出現(xiàn)Notice : Use of undefined constant 的解決辦法 PHP如何清空mySQL數據庫 CakePHP程序員必須知道的21條技巧 PHP采集圖片實例(PHP采集)