2015-10-05 61 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

相关问题