java - 针对多种模式验证字符串的最佳方法

标签 java design-patterns strategy-pattern

与正则表达式相比,这是一个关于最佳实践/设计模式的问题。

简而言之,我有 3 个值:从、到和我要更改的值。 From 必须匹配以下几种模式之一:

XX.X
>XX.X
>=XX.X
<XX.X
<=XX.X
XX.X-XX.X

而 To 必须是十进制数。根据 From 中给出的值,我必须检查我要更改的值是否满足 From 条件。例如,用户输入“From: >100.00 To: 150.00”意味着应该更改每个大于 100.00 的值。

正则表达式本身不是问题。问题是,如果我将整个 From 与一个正则表达式匹配并且它通过了,我仍然需要检查输入了哪个选项——这将在我的代码中生成至少 5 个 IF,每次我想添加另一个选项时,我都需要添加另一个如果 - 不酷。如果我要创建 5 个模式,也是一样。

现在我有一个 HashMap,它包含一个模式作为键和一个 ValueMatcher 作为值。当用户输入 From 值时,我会在循环中将其与该映射中的每个键进行匹配,如果它匹配,则我会使用相应的 ValueMatcher 实际检查我要更改的值是否满足“From”值。

另一方面,这种方法要求我拥有一个包含所有可能性的 HashMap、一个 ValueMatcher 接口(interface)和 5 个实现,每个实现只有一个简短的“匹配”方法。我认为它肯定比 IF 更好,但看起来仍然是一个夸张的解决方案。

还有其他方法吗?或者这是我实际上应该怎么做?我真的很遗憾我们不能在 HashMap 中保存方法/将它们作为参数传递,因为那样我只有 1 个类和所有匹配的方法并将它们存储在 HashMap 中。

最佳答案

责任链怎么样。

每个 ValueMatcher 对象只有一个 From/To 规则和对链中下一个 ValueMatcher 的引用。每个 ValueMatcher 都有一个方法来检查候选者并将其转换或传递给链中的下一个。

通过这种方式添加新规则是一个微不足道的扩展,控制代码只是将候选者传递给链中的第一个成员。

关于java - 针对多种模式验证字符串的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162340/

相关文章:

c# - 通过 C# 中的方法强制添加到集合的模式

c# - 策略模式电影条件从主类内部到客户端代码,那么有什么意义呢?

java - 使用 spring @transactional hibernate session.flush

java - 使用 UMLGraph 生成 javadoc 时出错,处理时出错 "dot file"

JavaFX:用键盘突然移动矩形会导致矩形变为 "stuck"

java - Android Calendar API 插入重复事件

php - 抽象工厂使用 "new"吗?

java - Java中如何获取匹配的字符串?

design-patterns - 策略模式 VS 装饰模式

java - 继承与策略模式