【发布时间】:2018-07-11 06:11:40
【问题描述】:
我正在编写一个代码,我需要编写很多开关案例,每个案例都有一些业务逻辑,基本上是来自 mysql db 查询的查询。即
String computeResult()
{
//code to connect to mysql
switch(x)
{
case A:
//executing some query and return the result after some processing
case B:
//executing some query and return the result after some processing
//15 more such cases ahead...
}
}
我正在用 Java 编写这段代码,这是一种面向对象的语言。
我研究了以下选项:
选项 1:将整个业务逻辑写入同一个类中的 15 个单独的方法中,但随后我将采用过程语言方式。
选项 2:应用策略模式。并使用通用代码创建一个基类,然后使用各种不同的策略分别计算单个案例的结果。对这些类的方法的调用仍然存在于computeResult() 方法中。但这将要求班级爆炸,我的项目中将增加 15 个班级。以后如果我需要添加更多的案例,那就意味着添加更多的类,并在computeResult()方法中添加更多的案例陈述。
我不知道有什么方法可以避免切换案例代码,这是一个硬编码的事情,最多我可以将这些案例名称放在常量文件中的类映射中。
例如:
HashMap < String, BaseResultComputer > map
这只会将案例名称映射到相应的结果计算机实现。因此,每当我们再添加一个实现时,我们只需再添加一个类,并且必须在该常量文件中进行更改。
请建议处理此问题的最佳设计。
【问题讨论】:
-
15 类,随病例数线性增长,远非“类爆炸”。您基于地图的解决方案对我来说很好。
-
感谢您的评论,如果有人有更好的想法,请继续等待。
-
丢掉 switch 语句,有 15 个类都有自己的
computeResult()实现。 -
那是我最后提到的一种地图的方式。
标签: java design-patterns switch-statement