2009-12-23 71 views
2

我將很快解決Java(GWT)項目(related question)。也許我試圖在這裏展開一些事情,但我想知道是否有任何用Java編寫的「模式匹配框架」(不知道是否有這個術語)? (也許這是我長期接觸Erlang時總是扭曲我對模式的想法:-)模式匹配框架?

我將使用「消息傳遞」體系結構在我的Java組件之間進行通信,並且希望有效地「匹配「消息行動。

也許我應該堅持本地化的狀態機還是還有其他的東西?

更新:「消息」將是一個攜帶「僅數據」的實例對象。我目前沒有計劃使用繼承來傳遞語義到上述消息,而是使用簡單的屬性。

Update2:在貼上SO(see here)的集體智慧之後,似乎Scala也超出了範圍。

(注:Java的新手在這裏......請溫柔)

+0

模式匹配通常與正則表達式有關。我認爲你想要的更多的僅僅是一個用於對象間交互的「消息傳遞」系統? – 2009-12-23 22:21:54

+1

聽起來像Scala案例類的vaggggggguely ...也許看看嗎? (對不起,我不更熟悉它) – 2009-12-23 22:22:15

+0

斯卡拉......嗯......我對斯卡拉一無所知...... @Jason:你應該寫一個答案(我的文檔清晰地顯示,我對撰稿人很溫和)。 – jldupont 2009-12-23 22:24:03

回答

2

您可能正在尋找的是Javaspaces(元組空間的Java實現)以及基於它們的屬性(在Javaspace世界中稱爲「條目」)的匹配對象。

空間存儲具有特定屬性或條目的對象(例如相關貨幣,城市,用戶等等)。然後,您可以通過指定0個或更多個這樣的條目從空間中選擇對象,從而取回0個或更多個對象。因此,它特別適用於消息傳送和生產者/消費者場景。

因此,您可以存儲具有特定屬性(例如消息類型,消費者類型等)的對象(消息),並且消費者將基於一組0個或更多屬性選擇這些對象。請注意,這需要修改您存儲的基礎對象。您可以運行一個空間進程中(在一個JVM中) - 它不僅僅是一個網絡存儲模式。

+0

+1:我已經喜歡我正在閱讀的內容......謝謝! – jldupont 2009-12-23 23:13:51

0

我認爲你要進行模式匹配是regular expressions並通過你的描述你將有一個event-driven program在消息的事件。

不要這樣做。相反,使用實際的對象作爲消息,這樣你就不必分析任何東西(很慢),但只是匹配類型並檢查相關指令(那很快)的實際操作。製造一臺狀態機不是一個不好的選擇。

+0

對於「消息」的接受可以被認爲是「事件」,但我沒有提到正則表達式,我也不會在這裏的情況下做到這一點:這些都很清楚(至少在我的腦海裏,對不起;-))範圍。 – jldupont 2009-12-23 22:51:59

+0

事件*是*消息,但消息的形式非常重要,以便您可以正確,快速地使用它。 – Esko 2009-12-24 08:12:19