【发布时间】:2013-01-10 00:53:17
【问题描述】:
我正在审查一些代码(Java)并根据业务逻辑流程图进行更改。当前的代码依赖于大量的 if 语句——我想尝试摆脱这种情况。我一直在阅读有关多态性的内容,并试图围绕如何将其应用到我的情况来思考。我可以使它适用于单个条件级别,但很难将其进一步扩展到多个条件级别。代码将在运行时执行,此“逻辑”方法将传递上一步中的变量。
人为的例子: 我们有 2 个动物园,“动物园 A”和“动物园 B”,以及“家”。这些中的每一个都是一个“地方”。在每个动物园中,我们有 4 个“位置”、“北”、“南”、“东”和“西”。 “家”只有一个位置。 我们想根据几个变量为一个人分配一个“目的地”,他们应该去哪里。 这些变量是: “地点”,与我们的地点相关(动物园 A、动物园 B、家)。 '方向',与我们的位置相关,(N,S,E,W)。 流程图:
|----- | 'HOME'
|Place?| ----- > *destination = 'home'*
|----- |
Zoo A | Zoo B
|---------------|----------------------------------------|
|----------| |----------|
|Direction?| |Direction?|
|----------| |----------|
| North | North
----------- *destination = 'Zoo A North' ----------- *destination = 'Zoo B North'
| East | East
----------- *destination = 'Zoo A East' ----------- *destination = 'Zoo B East'
| South | South
----------- *destination = 'Zoo A South' ----------- *destination = 'Zoo B South'
| West | West
----------- *destination = 'Zoo A West' ----------- *destination = 'Zoo B West'
所以如果人 X 有一个动物园 A 的地点和一个南的方向,他们应该有一个“南动物园”的目的地
我的代码目前使用 If 语句非常难看:
if(Place = 'HOME')
destination = 'HOME'
if(Place = 'Zoo A')
if(Direction = North)
destination = 'Zoo A North')
if(Direct = East)
destination = 'Zoo A East')
...
if(Place = 'Zoo B')
if(Direction = North)
destination = 'Zoo B North')
if(Direct = East)
destination = 'Zoo B East')
...
我可以将其转换为嵌套开关,其中变量为 ENUM。但我试图避免 if - else / switch 依赖,因为我有一个坏习惯,陷入其中。我尝试使用 Factory Design 来生成 Place 类,然后在每个位置和目的地使用多态,但它开始在我的脑海中变得过于复杂。是否值得远离 if/switches?我只是想过度设计它吗?
关于如何处理这样的逻辑流程有什么建议吗? 谢谢
【问题讨论】:
-
我并不完全清楚您在示例中要做什么。是“地点”和“方向”字符串还是其他类型的对象?无论哪种方式,一个简单的示例可能是在您的
Zoo类中创建goNorth()等方法。不过,我不完全确定这会解决您的问题,因为我并不完全清楚您要做什么。 -
@Code-Guru - 为简单起见,假设它们都是字符串。我要做的是从流程的顶部开始,并根据变量(方向和地点)最终得到一个“目的地”。但以最易于管理和维护的方式
标签: java polymorphism if-statement