2015-10-05 33 views
3

爲什麼java開發人員按照我們從模式獲得匹配器的方式?我的意思是爲什麼Java:爲什麼我們從模式獲得匹配器

Matcher matcher=pattern.matcher(string) 

我覺得邏輯上必須有類似

Pattern pattern=Pattern.compile(pattern); 
Matcher matcher=new Matcher(pattern,string); 
//if we need 
matcher.setPattern(newPattern); 

我的意思是匹配就像是一個正則表達式引擎和特徵碼就像是這臺發動機的命令。爲什麼我們要從命令創建引擎?

+0

'matcher.usePattern(newPattern)的結果;'改變圖案到一個新的。 –

回答

3

模式匹配算法的實現需要跟蹤某些狀態變量。

由於Pattern代表一個線程安全對象,它本身不能包含這些變量(否則它不會是線程安全的),因此這些變量存儲在一個匹配器對象中,該匹配器對象是爲單個匹配調用創建的,並且不是線程安全的。從Pattern的Javadoc:

這個類的實例是不可變的,並且是由多個 併發線程安全使用。 Matcher類的實例對於 這樣的使用是不安全的。

另外的Matcher類還提供訪問以匹配等的匹配組等

1

Matcher的Javadoc,

甲匹配從圖案通過調用圖案的matcher方法創建的。

這是Builder pattern的示例。每個鏈接的維基百科頁面

生成器模式的意圖是要找到一個解決伸縮構造anti-pattern

+0

我不認爲它是Builder模式。該模式包含進行匹配的算法,該算法是靜態的。匹配器包含匹配狀態,這是可變的。 setPattern方法用於在匹配過程中更改匹配算法。我看不到它是如何構建Builder模式的示例,您可以通過設置不同的方法來構建對象,並且在構建對象後它變得具體。 – nhahtdh