Mat*_*zyk 6 java design-patterns strategy-pattern
这是一个关于最佳实践/设计模式的问题,而不是正则表达式.
简而言之,我有3个值:from,to和我想要改变的值.从必须匹配几种模式之一:
XX.X
>XX.X
>=XX.X
<XX.X
<=XX.X
XX.X-XX.X
Run Code Online (Sandbox Code Playgroud)
而To必须是十进制数.根据From中给出的值,我必须检查我想要更改的值是否满足From条件.例如,用户输入"From:> 100.00 To:150.00"表示应更改大于100.00的每个值.
正则表达式本身不是问题.问题是,如果我匹配整个From与一个正则表达式并且它通过我仍然需要检查输入了哪个选项 - 这将在我的代码中生成至少5个IF,并且每次我想要添加另一个选项时我将需要添加另一个如果 - 不酷.如果我要创建5个模式,同样的事情.
现在我有一个HashMap,它将一个模式作为键,一个ValueMatcher作为值.当用户输入From值然后我在循环中将其与该映射中的每个键匹配,如果匹配,那么我使用相应的ValueMatcher来实际检查我想要更改的值是否满足"From"值.
另一方面,这种方法要求我拥有一个具有所有可能性的HashMap,一个ValueMatcher接口和5个实现,每个实现只有一个简短的"匹配"方法.我认为它肯定比IF好,但看起来仍然是一个夸张的解决方案.
还有其他办法吗?或者这是我应该如何做到的?我真的很遗憾我们不能在HashMap中保存方法/将它们作为参数传递,因为那时我只有一个包含所有匹配方法的类并将它们存储在HashMap中.
责任链怎么样?
每个 ValueMatcher 对象恰好有一个 From/To 规则以及对链中下一个 ValueMatcher 的引用。每个 ValueMatcher 都有一个方法来检查候选者并对其进行转换或将其传递给链中的下一个。
通过这种方式添加新规则是一个简单的扩展,控制代码只是将候选者传递给链的第一个成员。
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |